案例insensetive多条件检查输入

时间:2017-12-03 23:49:55

标签: python python-3.x

我已经在pycharm edu中的python 3上编写了一个计算器。代码的一部分在这里:

def again():
    calc_again = input('''
Repeat?
''')
#disagreements = frozenset('N'or 'No' or 'Not')
#agreements = frozenset('Y' or 'Yes' or 'Ya')
    if (calc_again.upper()=='Y' or calc_again.upper()=='Yes' or calc_again.upper()=='Ya'):
        calc()
    elif (calc_again=='N' or calc_again=="No" or calc_again=='Not'):
        print('Exit')
        again()
    else:
        print('Type y/n')

当我尝试输入除YN之外的任何其他条件时出现问题,它只是没有回复,我怀疑它的情况不敏感。

我试图使用:

if calc_again.upper() in agreements:
    do..

但它只给了我相同的结果。

有人可以修理并解释一下吗? 此外,可能更好地使用" while True"而不是" again()" (11 str)?

UPD 最后的更改看起来像

def again():    
    possible_conditions = frozenset(['y', 'yes', 'ya', 'n', 'no', 'not'])
    calc_again = input('Go again?')
    agreements = frozenset(['y', 'yes', 'ya'])
    if calc_again.lower() in possible_conditions:
        if calc_again.lower() in agreements:
            calc()
        else:
            print('bye')
            exit()
    else:
        print('choose y or n')
        again()

1 个答案:

答案 0 :(得分:0)

您的问题是您正在检查calc_again字符串的UPPER版本。因此,您将在calc_again.upper()中始终使用大写字母。要修复代码,只需将可能的案例列表放在上面。

if (calc_again.upper()=='Y' or calc_again.upper()=='YES' or calc_again.upper()=='YA'):
        calc()
    elif (calc_again=='N' or calc_again=="NO" or calc_again=='NOT'):
        print('Exit')
        again()
    else:
        print('Type y/n')

另外,我认为你必须将你的if语句放在while循环中,因为它必须始终根据用户输入执行。