用函数打破while循环? [复制]

Posted

技术标签:

【中文标题】用函数打破while循环? [复制]【英文标题】:breaking while loop with function? [duplicate] 【发布时间】:2013-04-18 02:12:18 【问题描述】:

我正在尝试创建一个包含 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')

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

【问题讨论】:

你的意思是让函数内的行缩进吗? 我更新了我的解释,如果您还有任何问题,请随时戳我。 【参考方案1】:

您可以处理例外情况:

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() 函数内部会引发异常,从而中断循环。为了不打印回溯,必须捕获并处理异常。

【讨论】:

创造性的答案,但在这种情况下,打破while循环的唯一方法是按n。我假设他希望在输入y 后继续游戏。【参考方案2】:

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

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

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

这背后的想法很简单。 yn 函数具有三种状态。用户回答是、否或无效。如果用户响应是或否,该函数将返回 1 表示是,2 表示否。如果用户没有提供有效的输入,例如一个空格,它会返回 0。

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

一旦我们得到来自yn 的有效响应,我们就会调用break,这会停止while loop,然后我们就完成了。

【讨论】:

我看不出与其他已经有 7 小时历史的答案有很大的不同,这使得 yn() 返回一个类似布尔值的值... 我告诉瑞恩,我醒来后会给他一个答案。我信守承诺,我确实以不同的方式处理它,添加了else 语句并使其不区分大小写。 ***.com/questions/16071394/…【参考方案3】:

您需要在循环本身内跳出 while 循环,而不是从另一个函数内跳出。

以下内容可能更接近您想要的:

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

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: ')
    if (yn(ready, 'Good, let\'s start our adventure!', 'That is a real shame.. Maybe next time')):
        break

【讨论】:

您能解释一下添加 return 0 和 return 1 的作用吗?光看还不太明白。 @Duane Moore 您可能应该将其更改为 return Truereturn False 以提高可读性。【参考方案4】:

一种方法是让yn 返回一个布尔值,然后将其用于跳出循环。否则函数内的break 无法跳出调用函数中的循环。

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

name = raw_input('What is your name, adventurer? ')
print 'Nice to meet you, '+name+'. Are you ready for your adventure?'
done = False
while not done:
    ready = raw_input('y/n ')
    done = yn(ready, 'Good, let\'s start our adventure!', 'That is a real shame.. Maybe next time')

【讨论】:

【参考方案5】:

使用 break ,即使不满足循环结束的条件,您也可以退出循环。你不能有 break 因为 'if /elif ' 不是一个循环,它只是一个条件语句。

【讨论】:

【参考方案6】:
a = True

def b():
    if input("") == "Quit":
        global a
        a == False
    else:
        pass

while a == True:
    print('Solution')

【讨论】:

请解释这是如何回答问题的。 如果在 while 循环中调用,它会从 if 语句中中断 while 循环。

以上是关于用函数打破while循环? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用函数打破while循环

使用 while(1) 但不能打破 c++ 中的循环

如何在python的内部for循环中打破while循环?

打破一个while循环并重新启动代码

Python打破嵌套的for循环并重新启动while循环

如何在Python中打破while循环?