【问题标题】:how do i skip if statements when users input is correct? [duplicate]当用户输入正确时,我如何跳过 if 语句? [复制]
【发布时间】:2014-05-27 12:16:29
【问题描述】:

我正在编写一个会询问您排名的代码。你有多个答案。 我要做的是当用户输入答案并且答案正确时,代码将继续执行,当答案错误时,代码将返回到 if 语句的开头。

我的代码目前所做的是无论如何它都会转到语句的顶部。 我想要它,以便在答案正确时跳过代码。

这是我的代码!

print ('what rank do you want')
print ('light')
print ('heavy')
print ('soldier')
print ('ninja')
print('if you want to pick a rank again than type "retake"')#ignore this line#


print ('light')
print ('heavy')
print ('soldier')
print ('ninja')

invalid_input = True
def start() :
    invalid_input = True
    rank = input('pleese pick a rank!\n')

    if rank == ('light'):               
        print ("you have chosen light")
        invalid_input = False           


    elif rank == 'heavy':
        print ('you have chosen heavy')
        invalid_input = False


    elif rank == ('soldier'):
        print ('you have chosen soldier')
        invalid_input = False


    elif rank == ('ninja'):
        print ('you have chosen ninja')
        invalid_input = False


    else:
        print ('Sorry, that was an invalid command!')


while invalid_input :
    start()

print ('well done you have picked your rank') #the bit where the code will carry on#

【问题讨论】:

  • 您没有其他if 语句。您有 elif 块,是第一个 if 语句的一部分。
  • 我想你的意思是你想让invalid_input成为一个全球性的;函数中的global invalid_input 可以解决这个问题。

标签: python if-statement input skip


【解决方案1】:

可以去掉很多重复的代码:

ranks = ['light', 'heavy', 'soldier', 'ninja']

print('what rank do you want')
for rank in ranks:
    print(rank)

def getRank():
    rank = input('please pick a rank!\n')
    if rank in ranks:           
        print("you have chosen", rank)
        return rank

rank = getRank()
while rank is None:
    print('Sorry, that was an invalid command!')
    rank = getRank()

print('well done you have picked your rank')

这里的想法是创建一个函数,如果输入不好,则返回特殊值 None。它通过“落到最后”来做到这一点,而无需明确的 return 语句。

【讨论】:

    【解决方案2】:

    start() 函数内部,invalid_input 是一个本地 变量,与您定义的全局invalid_input 分开。

    如果您希望invalid_input 被视为start() 的全局内部,您需要告诉解释器:

    def start():
        global invalid_input
        invalid_input = True
    

    但是,您最好完全避免全局变量,而是让您的函数返回TrueFalse

    def start() :
        rank = input('please pick a rank!\n')
    
        if rank in ('light', 'heavy', 'soldier', 'ninja'):
            print('You have chosen {}'.format(rank))
            return False
    
        else:
            print('Sorry, that was an invalid command!')
            return True
    
    invalid_input = True
    while invalid_input:
        invalid_input = start()
    

    或者如果有有效的输入,就使用无限循环和break out:

    while True:
        if not start():
            break
    

    不过,我个人会返回 True 以获取 有效 输入。

    【讨论】:

    • 不确定break 语句是否也有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    相关资源
    最近更新 更多