Python - Pemfilteran Input, Menghitung dengan Jumlah Variabel Input

Oct 09 2020

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

4 hjpotter92 Oct 09 2020 at 13:52

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.

2 Linny Oct 09 2020 at 10:56

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.