用函数打破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 True
和 return 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循环? [复制]的主要内容,如果未能解决你的问题,请参考以下文章