是/否输入循环,正确循环问题

时间:2016-10-12 21:15:32

标签: python loops

我编写了一个简短的猜谜游戏。但是,我不知道如何防止不正确的输入(是/否),阻止用户继续前进。这是一个工作代码。虽然真的尝试,但它只会更多地混淆输入。最远的是其他,通知玩家,但q计数向前移动。

# -*- coding: cp1250 -*-

import sys

def genVprasanja ():

    yes = set(['yes','y', ''])
    no  = set(['no','n'])
    testQ = ['hello1', 'hello33112', 'hello332', 'hello2', 'hello4','hellomore', 'ANSWER', 'hello1', 'hello33112', 'hello332', 'hello2', 'hello4','hellomore', 'ANSWER2', 'hello1', 'hello33112', 'hello332', 'hello2', 'hello4','hellomore', 'ANSWER3'] 
    points = 5
    total = 0
    for x in range(0,3):
        for y in xrange(len(testQ)):
            reply = str(raw_input('\n'+str(abs(y-5))+ ' - ' +  testQ[y]+' (y/n) --> ')).lower().strip()
            if reply in yes:
                print '\ncorect!\n\nAnswer is :',testQ[5], '\n\nPoints: ',points, '\n'
                total = total + points
                print 'Total: ', total, '\n'
                break                    
            elif reply in no:
                points = points - 1      
                if points !=  0:     
                    print '\nwrong!', '\n\nNext question for: ',points                                     
                else:
                    print '\nThe end!\n\n' 'Every anwser is wrong!\n\nYou got 0 points.\n\Correct answer is:', testQ[5],'\n\n'
                    total = total + points
                    print 'SKUPNE TOČKE: ', total
                    break
            else:
                sys.stdout.write("\nPlease press 'RETURN' or 'N'\n")
    points = 5
genVprasanja()

编辑:

每位玩家都可以回答三组5个问题。他们接受问题直到他们说是。如果他们说没有5次循环结束(3次) - 我使用var points来计算。

但是如果他们输入和不正确的单词(不是没有而不是是),输入问题会重复询问他们(直到他们输入有效答案)。之后,他们得到了他们未能有效回答的相同问题。

2 个答案:

答案 0 :(得分:1)

while True:将起作用,一旦条件满足,您需要break离开循环。

while True:
    reply = str(raw_input('\n' + str(abs(y - 5)) + ' - ' + testQ[y] + ' (y/n) --> ')).lower().strip()
    if reply in yes or reply in no:
            break

根据更新的范围,试试这个,似乎break可能会给您带来问题:

reply = False
while reply not in yes and reply not in no:
    reply = str(raw_input('\n' + str(abs(y - 5)) + ' - ' + testQ[y] + ' (y/n) --> ')).lower().strip()

答案 1 :(得分:0)

你需要在这里的'while',一旦你到达'for'区块的末尾,它将转到范围内的下一个值。

for y in xrange(len(testQ)):
    bGoodInput = False
    while not bGoodInput:
       reply = str(raw_input('\n'+str(abs(y-5))+ ' - ' +  testQ[y]+' (y/n) --> ')).lower().strip()
       if reply in yes:
           ...
           bGoodInput = True

       elif reply in no:
           ...
           bGoodInput = True

       else:
           ...