用函数打破while循环?

2024-05-15 01:13:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个函数,其中包含一个if/elif语句,我希望if中断while循环。。这个功能是一个文本冒险游戏,是一个是/否的问题。这是我到目前为止所想到的。。

def yn(x, f, g):
    if (x) == 'y':
         print (f)
         break
    elif (x) == 'n'
         print (g)

name = raw_input('What is your name, adventurer? ')
print 'Nice to meet you, '+name+'. Are you ready for your adventure?'

while True:
    ready = raw_input('y/n ')
    yn(ready, 'Good, let\'s start our adventure!', 
       'That is a real shame.. Maybe next time')

现在我不确定我是否正确地使用了这个函数,但是当我尝试它时,它说我不能在函数中有中断。所以如果有人能帮我解决这个问题,如果你能帮我解决函数和调用函数本身格式错误的问题,那将是非常感谢的。


Tags: 函数nameyouinputyourrawifis
2条回答

您需要将函数内部的中断更改为返回,并且需要有一个else语句,以防用户没有为您提供正确的输入。最后,需要将while loop中的调用转换为if语句。

如果玩家输入所需的命令,这将允许您中断while语句,否则它将再次询问。我还更新了yn函数,允许用户同时使用小写和大写字符,以及yes和no

def yn(input, yes, no):
    input = input.lower()
    if input == 'y' or input == 'yes':
        print (yes)
        return 1
    elif input == 'n' or input == 'no':
        print (no)
        return 2
    else:
        return 0

name = raw_input('What is your name, adventurer? ')
print 'Nice to meet you, %s. Are you ready for your adventure?' % name

while True:
    ready = raw_input('y/n ')
    if yn(ready, 'Good, let\'s start our adventure!',
       'That is a real shame.. Maybe next time') > 0:
        break

这背后的想法很简单。函数有三种状态。用户回答是、否或无效。如果用户响应为是或否,则函数将返回1表示是,2表示否。如果用户未提供有效输入(例如空格),则函数将返回0。

while True:循环中,我们用一个if statement来包装yn(“…..”,“…”)函数,检查yn函数是否返回大于0的数字。因为yn如果用户向我们提供有效输入,则返回0,而1或2表示有效输入。

一旦我们有来自yn的有效响应,我们就调用break,它停止while loop,我们就完成了。

你可以例外地工作:

class AdventureDone(Exception): pass

def yn(x, f, g):
    if x == 'y':
         print(f)
    elif x == 'n':
         print(g)
         raise AdventureDone

name = raw_input('What is your name, adventurer? ')
print 'Nice to meet you, '+name+'. Are you ready for your adventure?'

try:
    while True:
        ready = raw_input('y/n ')
        yn(ready, "Good, let's start our adventure!",
           'That is a real shame.. Maybe next time')
except AdventureDone:
    pass
    # or print "Goodbye." if you want

这会反复循环while循环,但在yn()函数内部会引发异常,从而中断循环。为了不打印回溯,必须捕获并处理异常。

相关问题 更多 >

    热门问题