代码和shell中显示的内容不同

时间:2012-12-21 15:21:46

标签: python-3.x

我认为解释这个的最好方法是发布我的代码,以及shell的结果。我是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()

我还有其他两个Celsius和Kelvin函数。你会在shell中看到我的结果的问题。

这是我得到的:

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":

没有失败,它总是从华氏温度转换为摄氏温度。每一次。

1 个答案:

答案 0 :(得分:2)

你不能像你所做的那样缩短条件。这样:

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

与此相同:

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

orand的每一方都是独立评估的,而'f'本身始终是真的。您需要为每种情况使用完整的短语。

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