打破循环和功能?(breaking while loop with function?)

2019-08-31 10:23发布

我试图做的是有一个,如果/ elif的语句中有一个功能,我想,如果将打破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')

现在,我不知道如果我使用的功能权限,但是当我尝试它,它说我不能在功能突破。 所以,如果有人可以帮助我那个问题,如果你能帮助我,如果功能和自称被误格式化的功能,这将是非常赞赏。

Answer 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()函数的异常升高,打破循环。 为了不打印回溯,异常必须被捕获并处理。



Answer 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

这背后的想法很简单。 该yn功能有三种状态。 无论用户提供答复是肯定的,没有或无效。 如果用户响应要么是或否,则该函数将返回无1是,和2。 而如果用户不提供有效的输入,例如,一个空白的空间,它会返回0。

里面的while True:循环中,我们包裹YN(“......‘’......”)函数的if statement来检查,如果该yn函数返回大于0的数由于yn会如果返回0用户为我们提供了一个有效的输入,和1或2的有效输入。

一旦我们从有效的响应yn我们所说的突破,即停止while loop ,我们正在做。



Answer 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


Answer 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')


Answer 5:

使用break,你可以走出循环,即使没有被满足的循环结束的条件。 你不能有突破,因为“如果/ elif的”不是一个循环,它只是一个条件语句。



Answer 6:

a = True

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

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


文章来源: breaking while loop with function?