Python - Pemfilteran Input, Menghitung dengan Jumlah Variabel Input
Saya telah mengerjakan kalkulator Aerodinamika menggunakan python (yang relatif baru bagi saya), Dalam program ini, sebuah nilai dapat dihitung berdasarkan beberapa input yang berbeda yaitu. a menghitung b, b menghitung c, atau c dapat menemukan b dan b dapat menemukan a .
Untuk menguraikan fungsi dari program ini, ia akan mengulang logikanya sampai ia telah menemukan semua hal yang bisa dilakukan dengan input yang diberikan. Kode ini cukup panjang untuk fungsinya dan itulah mengapa saya ingin melihat apakah itu dapat dioptimalkan atau apakah saya dapat melakukan sesuatu yang lebih baik. Untuk metode masukan, masukannya adalah string. Kodenya adalah sebagai berikut:
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
Saya meminta bantuan / umpan balik, terima kasih sebelumnya!
Jawaban
Selamat datang di Review Kode! Saya akan menambahkan apa yang telah dikatakan @Linny tentang petunjuk tipe dan penamaan variabel. Penamaan variabel adalah bagian dari pedoman PEP-8 python (lihat bawah).
Angka ajaib
Anda memiliki banyak angka ajaib dalam kode Anda, yang sebenarnya merupakan konstanta konversi, tetapi muncul tanpa penjelasan seperti itu.
Nama variabel
Karena Anda sedang menulis kalkulator aerodinamika, akan membantu jika Anda menggunakan nama lengkap untuk berbagai variabel dalam kode Anda. Misalnya. altitudealih-alih alt, temperaturealih-alih hanya temp( tempumumnya digunakan sebagai variabel sementara dalam kode).
Suhu tanah
Berdasarkan alur program, saya menganggap itu ground_temperaturepenting untuk perhitungan apa pun. Mungkin memeriksanya di awal dan menghentikannya lebih awal jika ada pemeriksaan yang tidak valid.
Argumen opsional
Dari atas, hanya ground_temperaturediperlukan untuk memanggil kalkulator. Segala sesuatu yang lain bersifat opsional, dan dapat dihitung. Mungkin fungsi yang menetapkan default nilai lain Nonemungkin lebih cocok untuk Anda:
def aerodynamic_calculator(
ground_temperature: float,
temperature: float = None,
altitude: float = None,
pressure: float = None,
density: float = None,
):
Boolean untuk setiap parameter
Dengan pendekatan di atas, Anda hanya dapat memvalidasi nilainya, tanpa harus melacak boolean untuk nilai tersebut.
if temperature and not altitude:
altitude = compute_altitude_from_temperature(temperature, ground_temperature)
PEP-8
Dalam python, adalah umum (dan disarankan) untuk mengikuti panduan gaya PEP-8 untuk menulis kode yang bersih, dapat dipelihara dan konsisten.
Fungsi dan variabel harus diberi nama dalam a lower_snake_case, kelas sebagai UpperCamelCase, dan konstanta sebagai UPPER_SNAKE_CASE.
Hanya beberapa catatan tentang gaya
- Variabel dan nama fungsi harus dalam
snake_case - Anda harus menambahkan petunjuk tipe untuk menampilkan tipe parameter apa yang Anda terima, dan nilai apa yang dikembalikan fungsi Anda.
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
Anda tidak perlu membuat variabel untuk penghitungan untuk mengembalikan penghitungan itu. Kembalikan saja ekspresi itu sendiri.