Calcular el valor de la hipotenusa o algun cateto.

Iniciado por calebe320, Diciembre 23, 2019, 05:05:02 PM

Tema anterior - Siguiente tema

0 Miembros y 2 Visitantes están viendo este tema.

Buen día tenga todo aquel que este leyendo esto, es mi primer post y les compartiré mi primer código que hice en python (soy nuevo en esto de la programación). Acepto cualquier tipo de critica, gracias.



Aquí abrimos un ciclo while con valor True para que siempre este activo, el programa nos preguntara que deseamos hacer (calcular hipotenusa o calcular cateto), como pueden observar, abajo de la pregunta se le asignan valores a tres variables (answer_option1 y  answer_option2) que son las opciones que tenemos de elegir "a" o "b" y "answered" que es la variable en donde se guardara nuestra respuesta:

Código: php
while True:
    print ("¿Qué desea calcular?\nA)Hipotenusa\nB)Cateto")
 
    answer_option1 = "a"
    answer_option2 = "b"
    answered = str (input())


    Aquí usaremos el condicional if:
   
Código: php
if answered == answer_option1:


En caso de que lo que haya contestado el usuario sea igual a "answer_option1" (inciso a) se ejecutara lo siguiente (las variables ctt1 y ctt2 son los valores de los dos catetos):

     
Código: php

      ctt1 = int (input ("Ingrese el valor del primer cateto:"))
      ctt2 = int (input ("Ingrese el valor del segundo cateto:"))
   
      ctt1 = ctt1 * 1.0
      ctt2 = ctt2 * 1.0
      #multiplicamos por 1.0 para que el valor sea absoluto y no haya problemas en los cálculos
     


Aquí el programa hará todo el calculo con los valores que le dimos hace un momento a las variables de ctt1 y ctt2 (sm_d_ctts significa suma de catetos y hptns es la hipotenusa) y por ultimo nos dirá el valor obtenido:
     
Código: php

     sm_d_ctts = (ctt1 ** ctt1) + (ctt2 ** ctt2)
      hptns = sm_d_ctts ** 0.5
     
      print ("El valor de la hipotenusa es de:", hptns)


Al haber terminado nos preguntara si queremos hacer otro calculo y, en caso de haber dicho que no,  el ciclo while que abrimos al inicio de todo el código se cerrara y acabara nuestro programa. En caso contrario se ejecutara de nuevo el programa con las mismas dos opciones (calcular hipotenusa o cateto) solo que ahora debemos hacer la parte del inciso b ( calcular cateto):

Código: php

      print ("¿Desea hacer otro cálculo?")

      answer_option3 = "si"
      answer_option4 = "no"

      answered2 = str (input())
     
      if answered2 == answer_option4:
        break


Utilizaremos la condición elif comparando lo que contestamos y "answer_option2"(inciso b), esta condición solo se llevara a cabo en caso de no haber contestado en inciso a (calcular hipotenusa).

Código: php

    elif answered == answer_option2:

      hptns2 = int (input("Ingrese el valor de la hipotenusa:"))

      ctt3 = int (input("Ingrese el valor del cateto conocido:"))

      hptns2 = hptns2 * 1.0

      ctt3 = ctt3 * 1.0
   
     #Resta de la hipotenusa al cuadrado - el cateto conocido al cuadrado
      rst = (hptns2 ** hptns2) - (ctt3 ** ctt3)
     
      ctt_rsltd = rst ** 0.5  #se eleva a la potencia 0.5 (equivalente a la raíz cuadrada)

      print ("El valor del cateto es de:", ctt_rsltd)


Y de nuevo nos preguntara si queremos hacer otro calculo, y hará lo mismo que explique mas arriba :D :
     
Código: php

      answer_option5 = "si"

      answer_option6 = "no"

      answered3 = str (input ("¿Desea hacer otro cálculo?")
      )

      if answered3 == answer_option6:
        break


Aqui el codigo completo:
Código: php


while True:
    print ("¿Qué desea calcular?\nA)Hipotenusa\nB)Cateto")
 
    answer_option1 = "a"
    answer_option2 = "b"
    answered = str (input())
 
    if answered == answer_option1:
   
      ctt1 = int (input ("Ingrese el valor del primer cateto:"))
      ctt2 = int (input ("Ingrese el valor del segundo cateto:"))
   
      ctt1 = ctt1 * 1.0
      ctt2 = ctt2 * 1.0

      sm_d_ctts = (ctt1 ** ctt1) + (ctt2 ** ctt2)
      hptns = sm_d_ctts ** 0.5
     
      print ("El valor de la hipotenusa es de:", hptns)

      print ("¿Desea hacer otro cálculo?")

      answer_option3 = "si"
      answer_option4 = "no"

      answered2 = str (input())
     
      if answered2 == answer_option4:
        break
   
    elif answered == answer_option2:

      hptns2 = int (input("Ingrese el valor de la hipotenusa:"))

      ctt3 = int (input("Ingrese el valor del cateto conocido:"))

      hptns2 = hptns2 * 1.0

      ctt3 = ctt3 * 1.0
   

      rst = (hptns2 ** hptns2) - (ctt3 ** ctt3)
     
      ctt_rsltd = rst ** 0.5

      print ("El valor del cateto es de:", ctt_rsltd)

      answer_option5 = "si"

      answer_option6 = "no"

      answered3 = str (input ("¿Desea hacer otro cálculo?")
      )

      if answered3 == answer_option6:
        break





Diciembre 23, 2019, 07:57:50 PM #1 Ultima modificación: Diciembre 23, 2019, 08:00:23 PM por DtxdF
Hola @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Un placer y agradezco que requiera de nuestra ayuda, con gusto yo le brindo mi opinión.

Bueno, vamos al análisis...

Primero lo primero, debe identificar que versión de Python está usando; algunas veces uno leyendo o ejecutando el mismo código puede deducirlo, pero otras no.

Consejo: Siempre piense que está creando un proyecto enorme, así sea una linea que está imprimiendo un "Hola Mundo", pero a lo que me refiero es que siga buenas practicas, buena estructuración, usó de funciones para evitar las repeticiones innecesarias, saber cuándo usar variables, ... Puedo seguir toda la noche ...

Lo digo porque en algunas lineas veo que está la función "input", tanto para Python 2 cómo para su versión 3 existe esa función, pero claro sí ejecutamos su código, genera un error (en caso de hacerlo en Python 2).

Código: text
  File "culo.py", line 2
SyntaxError: Non-ASCII character '\xc2' in file culo.py on line 2, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details


Claro, genera ese error de cofificación, pero yo podría pensar "Ah, seguro se le olvido colocarlo" (un pensamiento peculiar, porque sí alguien comparte un código tiene que probarlo).

Así que le coloco simplemente "la solución":

Código: python
# -*- coding: UTF-8 -*-
while True:
    print ("¿Qué desea calcular?\nA)Hipotenusa\nB)Cateto")
...


Ejecuto el script:

Código: bash
¿Qué desea calcular?
A)Hipotenusa
B)Cateto


¿Todo bien, cierto?...

Código: bash
¿Qué desea calcular?
A)Hipotenusa
B)Cateto
a
Traceback (most recent call last):
  File "culo.py", line 8, in <module>
    answered = str (input())
  File "<string>", line 1, in <module>
NameError: name 'a' is not defined


¿Qué? ¿Por qué sucede?... Se lo dejo de tarea. Una fácil búsqueda en su buscador seria: "Error input en python 2".

Tal vez se cuestione, ¿Por qué necesito saber Python 2, sí yo sólo quiero aprender Python 3?, porque una de las reglas para aprender a programar mucho más rapido es leer, no sólo tutoriales, guias, libros, cursos o lo que sea; también leer código ajeno y el código en Python 2 es muy redundante y excelente para eprender, a pesar de que esté habiendo actualizaciones hacia python 3.

También una de las razones, es si quiere crear un script que "no le importe" si usa la versión 2 o 3, será necesario conocer las especificaciones de cada uno.

Ahora sí, con el análisis del código:

Para una mejor compresión esta será la sintaxis que usaré para la explicación:

Código: text
LINE <Número de la linea>: <Código>


Código: text
LINE 2: print ("¿Qué desea calcular?\nA)Hipotenusa\nB)Cateto")


NO, use caracteres de nueva linea ('\n'), sin antes colocar de una manera legible para usted u otra persona que quiera colaborar en su código o básicamente separe esos caracteres con el string.

Una manera más legible:

Código: python
print(
            '¿Qué desea calcular?',
            '\n', 'A) Hipotenusa',
            '\n', 'B) Cateto')


*A simple vista o incluso desde la luna se puede apreciar el código*

Código: text
LINE 7:    answer_option1 = "a"
LINE 8:    answer_option2 = "b"


Variables innecesarias. Use variables sólo cuándo haya que usar el valor que las referencia más de una vez o cuándo usted sienta que en verdad haya que usaralas.

No sé cuando usarlas, ¿Me dices?, claro, por ejemplo cómo una pequeña configuración en los encabezados del script, aunque se puede hacer de mejores maneras, no está mal si es un pequeño script.

Aunque en este caso, simplemente puede colocarlas directamente, sin crear variables.

Por ejemplo en la condicional: "if":

Código: python
if answered == answer_option1:


Hagalo así:

Código: python
if answered == 'a':


Otra cosa "hablando de los condicionales". Sí está seguro que necesita que el usuario sólo ingrese un caracter en la entrada estándar, puede hacer esto:

Código: python
answered = str(input())[:1]


*Tiene que saber cómo manipular cadenas e incluso array's para entender*. Puede buscar en su buscador "delimitadores en arrays python" o "slice arrays python" *Sí, lo sé, no parece coherente, pero recuerde que estamos "hablando" con un buscador, no una persona*

Una cosa en la misma linea que le mencione. Sí realmente está seguro de que esa función va a generar un tipo de dato que espera, no es necesario convertirlo.

Código: python
answered = str (input())


Puede hacerlo así:

Código: python
answered = input()


Código: text
LINE 13:      ctt1 = int (input ("Ingrese el valor del primer cateto:"))
LINE 14:      ctt2 = int (input ("Ingrese el valor del segundo cateto:"))
   
LINE 16:      ctt1 = ctt1 * 1.0
LINE 17:      ctt2 = ctt2 * 1.0


Comencemos con las dos primeras. Tiene que saber cómo "atrapar" una excepción, usando: try, except, else, finally. Puede buscar en su buscador "manejo de excepciones en python".

¿A mi que me importa?, bueno, eso puede evitar lo siguiente:

Código: bash
¿Qué desea calcular? 
A) Hipotenusa
B) Cateto
a
Ingrese el valor del primer cateto:a
Traceback (most recent call last):
  File "culo.py", line 13, in <module>
    ctt1 = int (input ("Ingrese el valor del primer cateto:"))
ValueError: invalid literal for int() with base 10: 'a'


Consejo: Siempre piense que el usuario es un tonto que ni siquiera sabe conectar la PC al tomacorriente y en su segunda versión de la perspectiva del usuario, debe pensar que el usuario es un hacker de la NSA.

Para evitar eso:

Código: python
...
      try:
   
        ctt1 = int (input ("Ingrese el valor del primer cateto:"))
        ctt2 = int (input ("Ingrese el valor del segundo cateto:"))
   
      except ValueError:

        print('¡Debe ingresar valores numericos!')
        continue
...


Siguiendo con el análisis, pero con las mismas lineas:

Cómo veo que coloca una conversión a un entero pero usted desea un valor real, puede usar la función "float" y se ahorra algunas lineas:

Código: python
...
      ctt1 = float(input ("Ingrese el valor del primer cateto:"))
      ctt2 = float(input ("Ingrese el valor del segundo cateto:"))
...


*Se evitaria las lineas 13 y 14*

Cómo le dije, el usuario es un hacker de la NSA, aunque también podria ser un angelito.

Un usuario que se irá al cielo:

Código: bash
¿Qué desea calcular?
A)Hipotenusa
B)Cateto
a
Ingrese el valor del primer cateto:2
Ingrese el valor del segundo cateto:4
El valor de la hipotenusa es de: 16.1245154965971
...


Mientras que un usuario que será castigado por el resto de su vida miserable:

Código: bash
¿Qué desea calcular?
A)Hipotenusa
B)Cateto
a
Ingrese el valor del primer cateto:214214214214124819238491234812849128409812084081284080104012048081204801249249912491294914912984918249812491202164892689568952106956091526096506950912656109506509165
Ingrese el valor del segundo cateto:965186591865582658217586125896561565986519862964109462104621964129765050958571797249127497129047219479217401247124971294721
Traceback (most recent call last):
  File "culo.py", line 16, in <module>
    sm_d_ctts = (ctt1 ** ctt1) + (ctt2 ** ctt2)
OverflowError: (34, 'Numerical result out of range')


Se lo dejo de tarea  ;) ...

Una cosa que tiene que ver cada vez que coloque un "input", siempre deje decorado el prompt, con cualquier caracter emblematico, cómo ">",  "$", "-", "~" o cualquiera que desee.

Ejemplo:

Código: bash
¿Qué desea calcular?
A)Hipotenusa
B)Cateto
> a
Ingrese el valor del primer cateto:24
Ingrese el valor del segundo cateto:124
El valor de la hipotenusa es de: 6.19647183546948e+129
¿Desea hacer otro cálculo?
>


Que flojeraaaaaaa..., bueno, aveces en los proyectos enormes uno no sabe sí está cargando el programa o qué, por eso es mejor decorar el prompt para evitarnos la molestia de pensar.

Otra cosa que debe ser de su interes, es el temido "CTRL-C" y "CTRL-Z". Sólo ejecute el script y presione una u otra:

CTRL-Z:

Código: dos
¿Qué desea calcular?
A)Hipotenusa
B)Cateto
> ^Z
Traceback (most recent call last):
  File "culo.py", line 6, in <module>
    answered = str (input("> "))
EOFError


Eso para el caso de Windows, para el de Linux, lo detendria y lo colocaria en la cola de trabajos.

CTRL-C:

Código: php
¿Qué desea calcular?
A)Hipotenusa
B)Cateto
> ^CTraceback (most recent call last):
  File "culo.py", line 6, in <module>
    answered = str (input("> "))
KeyboardInterrupt


Ahora algo que pude notar; comete una mala practica, esa es, copiar código.

Código: python
LINE 23:      answer_option3 = "si"
LINE 24:      answer_option4 = "no"
LINE 48      answer_option5 = "si"
LINE 50:      answer_option6 = "no"


¡Mentiroso!, uso variables con nombres diferentes, bueno, pero el contenido no lo es  :P

Puede usar dos variables desde un principio, en el encabezado del script y listo o simplemente no es necesario crearlas y colocar el contenido directamente en la condicional.

Otra cosa, es que cómo buen sujeto qué es; coloque el valor que el programa espera recibir cada vez que haga una pregunta de afirmación:

Código: bash
¿Qué desea calcular?
A)Hipotenusa
B)Cateto
a
Ingrese el valor del primer cateto:2
Ingrese el valor del segundo cateto:1
El valor de la hipotenusa es de: 2.23606797749979
¿Desea hacer otro cálculo?
no sé ...


Puede hacer esto:

Código: bash
¿Qué desea calcular?
A)Hipotenusa
B)Cateto
a
Ingrese el valor del primer cateto:1
Ingrese el valor del segundo cateto:2
El valor de la hipotenusa es de: 2.23606797749979
¿Desea hacer otro cálculo? - (S)i o (N)o
s


Otra cosa, es que es mejor recibir un solo carácter, en vez de varios; cómo le dije anteriormente, puede usar el manejo de cadenas "string[:1]" y obtendra sólo el prmer carácter.

Una cosa a tener en cuenta, es el método ".lower( )" que le ofrece los string:

Código: python
if answered[:1].lower() == 'a':


Convierte "answered", osea la entrada de datos a minusculas y además sólo utiliza el primer carácter.

¿Por qué querria eso?, simple, cómo le dije, los usuarios además de tontos, son hackers y van a intentar quebrar su script que sólo imprime "Hola Mundo"

Por último, pero no menos importante (En algunos casos), es que se te olvido el "else":

Código: python
...
    elif answered == answer_option2:

      hptns2 = int (input("Ingrese el valor de la hipotenusa:"))

      ctt3 = int (input("Ingrese el valor del cateto conocido:"))

      hptns2 = hptns2 * 1.0

      ctt3 = ctt3 * 1.0
   

      rst = (hptns2 ** hptns2) - (ctt3 ** ctt3)
     
      ctt_rsltd = rst ** 0.5

      print ("El valor del cateto es de:", ctt_rsltd)

      answer_option5 = "si"

      answer_option6 = "no"

      answered3 = str (input ("¿Desea hacer otro cálculo? - (S)i o (N)o: ")
      )

      if answered3 == answer_option6:
        break
# Aquí D:


YO, cómo tengo problemas de la vista (Lo digo enserio  :'(), quizas piense estar escribiendo la "e" cómo una "a" y no sabre por deducción sí estoy cometiendo un error o no, así que en caso de que el usuario no escriba una opción correcta, se le informa:

Código: bash
¿Qué desea calcular?
A)Hipotenusa
B)Cateto
ef
Anota la opción correcta ciego de mier**
¿Qué desea calcular?
A)Hipotenusa
B)Cateto
f
Anota la opción correcta ciego de mier**
¿Qué desea calcular?
A)Hipotenusa
B)Cateto


Código:

Código: python
...
    elif answered == answer_option2:

      hptns2 = int (input("Ingrese el valor de la hipotenusa:"))

      ctt3 = int (input("Ingrese el valor del cateto conocido:"))

      hptns2 = hptns2 * 1.0

      ctt3 = ctt3 * 1.0
   

      rst = (hptns2 ** hptns2) - (ctt3 ** ctt3)
     
      ctt_rsltd = rst ** 0.5

      print ("El valor del cateto es de:", ctt_rsltd)

      answer_option5 = "si"

      answer_option6 = "no"

      answered3 = str (input ("¿Desea hacer otro cálculo? - (S)i o (N)o: ")
      )

      if answered3 == answer_option6:
        break
    else:
        print("Anota la opción correcta ciego de mier**")


Listo, ese es todo mi análisis. Sí me falto algo, mi escusa es que tengo sueño.

Recuerde que si tiene una duda, sólo escriba y comente, yo estoy vigilidando todo  8) ...

~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

Muchísimas gracias por haberse tomado el tiempo de decirme todos esos detalles, me falta demasiado por aprender y tomaré en cuenta todo lo que me dijo. Si surge alguna duda durante el proceso de aprendizaje, le escribiré.   ;D

Diciembre 28, 2019, 06:00:34 AM #3 Ultima modificación: Diciembre 28, 2019, 06:07:23 AM por NLD
@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta , @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta ,

Aqui tienes otro ejemplo para calcular pitagoras en Python - 3.8.0

Código: python
# Pyhton V. 3.8

from math import sqrt

print("""
This program was made by :

    888888     888   888            888888888
    888 888    888   888            888     888
    888  888   888   888            888       888
    888   888  888   888      888   888       888
    888    888 888   888      888   888     888
    888     888888   888888888888   888888888


    """)

formula = input("Which side do you wanna calculate? a, b or c? ")

if formula == 'c':
    a = int(input("Put the value of a: "))
    b = int(input("Put the value of b:"))

    side_c = sqrt(a *a + b *b)

    print("The lenght of the side c is: ")
    print(formula)


if formula == 'a':
    b = int(input("Put the value of b: "))
    c = int(input("Put the value of c: "))
    side_a = sqrt((b *b) - (c *c))

    print("the value of a is: ")
    print(side_a)

if formula == 'b':
    a = int(input("Put the value of a: "))
    c = int(input("Put the value of c: "))
    side_b = sqrt((c *c) - (a *a))

    print("The value of side b is: ")
    print(side_b)

else:
    print("Please select a side between a, b, c : ")

@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Está muy bueno para ayudar a @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta  :D

PD: Una pequeña cosa, imprimes la opción "c" en vez del valor en la linea 22, del resto está excelente para ayudarlo.
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Oh cierto se me olvido declararlo, hahaha, gracias.

@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta tambien te interesaria este codigo en concreto, creo que te llamaría la atención.

Código: python
# Python V´- 3.8.0

def fact(n):
    if (n == 0):
        return 1
    else:
        return n*fact (n-1)

x = int(input("Enter x : "))
y = fact(x)

print("{}! = {}".format (x,y))