我正在尝试创建一个包含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')
现在我不确定我是否正确使用该功能,但是当我尝试使用该功能时,它说我不能在功能上中断。因此,如果有人可以帮助我解决这个问题,如果你能帮助我,如果函数和调用函数本身的格式错误,那将非常感激。
答案 0 :(得分:7)
您可以使用例外:
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()
函数内部会引发异常,从而中断循环。为了不打印回溯,必须捕获并处理异常。
答案 1 :(得分:1)
你需要在循环内部跳出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
答案 2 :(得分:1)
您需要将函数内部的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
函数有三种状态。用户回答是,否或无效。如果用户响应为yes或no,则函数将返回1表示是,而2表示否。如果用户没有提供有效的输入,例如一个空格,它将返回0。
在while True:
循环中,我们使用if statement
包装yn('....','....')函数,检查yn
函数是否返回数字大于0.如果用户向我们提供有效输入,则yn
将返回0,有效输入则为1或2。
一旦我们收到yn
的有效回复,我们就会调用break,这会停止while loop
,我们就完成了。
答案 3 :(得分:0)
一种方法是让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')
答案 4 :(得分:0)
使用break,即使没有满足循环结束的条件,也可以退出循环。你不能休息,因为'if / elif'不是一个循环,它只是一个条件语句。
答案 5 :(得分:0)
a = True
def b():
if input("") == "Quit":
global a
a == False
else:
pass
while a == True:
print('Solution')