Python - Filtrado de entrada, calculando con una cantidad variable de entradas -- python campo con python-3.x campo con mathematics campo con calculator camp codereview Relacionados El problema

Python - Input Filtering, Calculating with a Variable Amount of Inputs


7
vote

problema

Español

He estado trabajando en una calculadora de aerodinámica con Python (que soy relativamente nuevo en), en este programa, se puede calcular un valor en función de varias entradas diferentes IE. Las calculas B, B calculadas C, o C pueden encontrar B y B pueden encontrar un .

Para elaborar en la función de este programa, se incluirá a través de su lógica hasta que haya encontrado todas las cosas que podría con las entradas (s). El código es bastante largo para su función y es por eso que me gustaría ver si podría optimizarse o si pudiera hacer algo mejor. Para el método de entrada, la entrada es una cadena. El código es el siguiente:

  chmod4  

APROICE CUALQUIER AYUDA / FEEDBACK, ¡gracias de antemano!

Original en ingles

I've been working on an Aerodynamics calculator using python (which I'm relatively new at), In this program, a value can be calculated based on multiple different inputs ie. a calculates b, b calculates c, or c can find b and b can find a.

To elaborate on the function of this program it will loop through it's logic until it has found all the things it could with the given input(s). The code is pretty long for it's function and that's why I'd like to see if it could be optimized or if I could do anything better. For the input method, the input is a string. The code is as follows:

def Find_Pressure(temp):     pressure = (101.29 * (((temp + 273.1) / 288.08) ** 5.256))     return pressure   def Find_Temp_Alt(alt, ground_temp):     Temp = ground_temp - (0.00649 * alt)     return Temp   def Find_Density(pressure, temp):     density = (pressure / (0.2869 * (temp + 273.1)))     return density   def Find_Alt_Temp(temp, ground_temp):     Alt = ((ground_temp - temp) / 0.00649)     return Alt   def is_Valid(x):     try:         float(x)         return True     except ValueError:         return False   def Parser(ground_temp, temp, alt, pressure, density):     a = t = p = d = False     run = True     Alt = Temp = Pressure = Density = "N/A"     if is_Valid(alt):         Alt = float(alt)         a = True     if is_Valid(temp):         Temp = float(temp)         if Temp <= -273.1:             t = False         else:             t = True     if is_Valid(pressure):         Pressure = float(pressure)         p = True     if is_Valid(density):         Density = float(density)         d = True      if not is_Valid(ground_temp):         print('Enter Ground Temp')     else:         G_T = float(ground_temp)         while run:             run = False             if a and not t:                 Temp = Find_Temp_Alt(Alt, G_T)                 t = True                 run = True              if t and not a:                 Alt = Find_Alt_Temp(Temp, G_T)                 a = True                 run = True              if p and not t:                 Temp = ((288.08 * ((Pressure / 101.29) ** (1 / 5.256))) - 273.1)                 t = True                 run = True              if t and not p:                 Pressure = Find_Pressure(Temp)                 p = True                 run = True              if (p and t) and not d:                 Density = Find_Density(Pressure, Temp)                 d = True                 run = True             if (d and t) and not p:                 Pressure = (Density * 0.2869 * (Temp + 273.1))                 p = True                 run = True              if (d and p) and not t:                 Temp = ((Pressure / Density * 0.2869) - 273.1)                 t = True                 run = True         return Alt, Temp, Pressure, Density 

I apricate any help/feedback, thanks in advance!

           

Lista de respuestas

4
 
vote
vote
La mejor respuesta
 

¡Bienvenido a la revisión del código! Me iré a agregar a lo que @linny ya ha dicho acerca de los tipos de sugerencias y denominación variable. La denominación variable es parte de las Directrices PEP-8 de Python (ver Bottom).

Números mágicos

Tiene muchos números mágicos en su código, que son constantes de mayor conversión, pero aparecen sin tal explicación.

Nombres de variables

Dado que está escribiendo una calculadora de aerodinámica, ayudaría si usa nombres completos para varias variables en su código. Por ejemplo. ConcuurentCircularBuffer<int>5 en lugar de ConcuurentCircularBuffer<int>6 , ConcuurentCircularBuffer<int>7 en lugar de solo ConcuurentCircularBuffer<int>8 ( 99887766555443319 se usa generalmente como una variable temporal en el código).

Temperatura del suelo

Basado en el flujo de programa, asumo que 99887766555443320 es esencial para cualquier cálculo. Quizás, compruebe por el principio y se rompe temprano en caso de cheques no válidos.

Argumentos opcionales

De lo anterior, solo Stopwatch1 es necesario para llamar a la calculadora. Todo lo demás es opcional, y se puede calcular. Tal vez una función que por defecto, otros valores en Stopwatch2 puede adaptarse mejor a usted:

  Stopwatch3  

Booleanos para cada parámetro

Con el enfoque anterior, solo puede validar el valor en sí, sin tener que realizar un seguimiento de un booleano para esos valores.

  Stopwatch4  

PEP-8

En Python, es común (y recomendado) seguir la guía de estilo PEP-8 para escribir un código limpio, sostenible y consistente.

Las funciones y las variables deben ser nombradas en un Stopwatch5 , clases como Stopwatch6 y constantes como Stopwatch7 .

 

Welcome to Code Review! I'll be adding onto what @Linny has already said about type hints and variable naming. Variable naming is part of python's PEP-8 guidelines (see bottom).

Magic numbers

You have a lot of magic numbers in your code, which are really conversion constants, but appear with no such explanation.

Variable names

Since you're writing an aerodynamics calculator, it'd help if you use full names for various variables in your code. For eg. altitude instead of alt, temperature instead of just temp (temp is generally used as a temporary variable in code).

Ground temperature

Based on the flow of program, I assume that ground_temperature is essential for any calculations. Perhaps check for it at the very beginning and break early in case of invalid checks.

Optional arguments

From the above, only ground_temperature is needed to call the calculator. Everything else is optional, and can be computed. Perhaps a function which defaults other values to None might suit you better:

def aerodynamic_calculator(     ground_temperature: float,     temperature: float = None,     altitude: float = None,     pressure: float = None,     density: float = None, ): 

Booleans for each parameter

With the above approach, you can just validate for the value itself, without having to keep track of a boolean for those values.

if temperature and not altitude:     altitude = compute_altitude_from_temperature(temperature, ground_temperature) 

PEP-8

In python, it is common (and recommended) to follow the PEP-8 style guide for writing clean, maintainable and consistent code.

Functions and variables should be named in a lower_snake_case, classes as UpperCamelCase, and constants as UPPER_SNAKE_CASE.

 
 
2
 
vote

Solo un par de notas sobre el estilo

  • Los nombres de la variable y la función deben estar en Stopwatch8
  • Debe agregar sugerencias de tipo para mostrar qué tipo de parámetros acepta, y qué valor (s) devuelven sus funciones.
  Stopwatch9  

No necesita crear una variable para un cálculo para devolver ese cálculo. Solo devuelve la expresión en sí.

 

Just a couple notes about style

  • Variable and function names should be in snake_case
  • You should add type hints to display what types of parameters you accept, and what value(s) your functions return.
def find_pressure(temp: float) -> float:     return (101.29 * (((temp + 273.1) / 288.08) ** 5.256))   def find_temp_alt(alt: float, ground_temp: float) -> float:     return ground_temp - (0.00649 * alt)   def find_density(pressure: float, temp: float) -> float:     return (pressure / (0.2869 * (temp + 273.1)))   def Find_Alt_Temp(temp: float, ground_temp: float) -> float:     return ((ground_temp - temp) / 0.00649)   def is_valid(x: str) -> bool:     try:         float(x)         return True     except ValueError:         return False 

You don't need to create a variable for a calculation in order to return that calculation. Just return the expression itself.

 
 

Relacionados problema

5  Calculadora de área y volumen  ( Area and volume calculator ) 
Soy un codificador para principiantes, haciéndolo únicamente por diversión, habiendo comenzado a codificar hace unos dos meses con Python. Tengo un punto de t...

3  Primer programa de Python: Calculadora básica  ( First python program basic calculator ) 
Quiero comenzar a aprender Python por diversión y, por lo tanto, podría profundizar en los proyectos de aprendizaje de la máquina más adelante en el futuro ta...

6  Calculadora simple en C #  ( Simple calculator in c ) 
Es una calculadora básica donde el usuario ingresa a dos números, y una operación y el programa lo convierten en una ecuación y obtiene la respuesta. Por ejem...

4  Calculadora binaria de Python  ( Python binary calculator ) 
Mi tarea fue construir una calculadora en la adición binaria de soporte de Python, etc. Para comenzar Definir un par de excepciones personalizadas: paper...

8  Calculadora de entrada de 2 entradas Java GUI  ( Java gui 2 input calculator ) 
He escrito este código para una calculadora de dos entradas. ¿Hay algo que pueda hacer para que este código sea más eficiente? import javax.swing.*; impor...

0  Calculadora de java simple en columpio  ( Simple java calculator in swing ) 
¿Puedes revisar este código para mí? ¿Cómo lo hago mejor? //this is the calculator import java.awt.*; import java.awt.event.*; import javax.swing.*; import...

10  Calculadora básica que lleva 2 números y hace una operación con ellos  ( Basic calculator that takes 2 numbers and does an operation with them ) 
El código funciona perfectamente bien para mí (lo compiló en Bluej y Eclipse), pero me preguntaba qué se consideraban otros programadores más experimentados. ...

6  Calculadora aritmética básica  ( Basic arithmetic calculator ) 
La calculadora admite los operadores básicos (agregar, sustancia, dividir, multiplicar). en este momento, solo funciona con enteros positivos No valido...

2  Una calculadora básica en C que utiliza un bucle  ( A basic calculator in c that uses a loop ) 
He creado un programa que forma una calculadora básica en C que incluye las operaciones básicas como la adición, la resta, la multiplicación y la división. Pe...

6  Calculadoras para ecuaciones de la ley de gas  ( Calculators for gas law equations ) 
He realizado un programa C ++ que calcula una variable faltante en una ecuación para una de las cinco leyes siguientes de gas: la ley de Boyle ley de car...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos