1

これを説明する最善の方法は、私のコードとシェルからの結果を投稿することだと思います。私はPython(3.3を使用)が初めてで、一般的にコーディングしているので、非常に単純なものが欠けていると確信しています。

これが私のコードです:

def menu():
    global temp
    global temp_num

    temp = input('Enter a temperature to convert:\n (ex. 32F) ->  ')
    temp_select = temp[-1]
    temp_num = int(temp[:-1])

    if temp_select == 'F' or 'f':
        return Fahr()
    elif temp_select == 'C' or 'c':
        return Cels()
    elif temp_select == 'K' or 'k':
        return Kelv()
    else:
        print('Please make a valid selection')
        menu()


def Fahr():
    ''' Converts selected temperature from Fahrenheit to Celsius, Kelvin, or both.'''

    selection = input('Convert to (C)elsius, (K)elvin, or (B)oth? -> ')
    to_cels = round((5/9) * (temp_num - 32), 1)
    to_kelv = round(5/9 * (temp_num - 32) + 273, 1)

    if selection == 'C' or 'c':
        print(temp_num, 'degrees Fahrenheit =', to_cels, 'degrees Celsius.\n')
        exitapp()
    elif selection == 'K' or 'k':
        print(temp_num, 'degrees Fahrenheit =', to_kelv, 'degrees Kelvin.\n')
        exitapp()
    elif selection == 'B' or 'b':
        print(temp_num, 'degrees Fahrenheit =', to_cels, 'degrees Celsius and', to_kelv, 'degrees Kelvin.\n')
        exitapp()
    else:
        print('Please make a valid selection')
        Fahr()

摂氏とケルビンには他に 2 つの機能があります。シェルでの結果に問題があることがわかります。

ここに私が得るものがあります:

Enter a temperature to convert:
 (ex. 32F) ->  32C
Convert to (C)elsius, (K)elvin, or (B)oth? -> b
32 degrees Fahrenheit = 0.0 degrees Celsius.

Exit the program?
 Enter "y" or "n":

必ず華氏から摂氏に変換します。毎回。

4

1 に答える 1

2

行ったように条件を短縮することはできません。これ:

if temp_select == 'F' or 'f':
    return Fahr()

これと同じです:

if temp_select == 'F':
    return Fahr()
if 'f':
    return Fahr()

との各辺は独立して評価さorれ、それ自体は常に true です。条件ごとに完全なフレーズを使用する必要があります。and'f'

if temp_select == 'F' or temp_select == 'f':
    return Fahr()
于 2012-12-21T15:26:13.270 に答える