随机int无限循环

时间:2012-02-05 01:21:41

标签: python random infinite-loop

这个函数在选择一个整数后不会停止,它会在无限循环中继续这样做。任何人都可以告诉我为什么,或者我该如何修复这个问题?

def wGen():
    top = len(Repo.words)
    randInt = random.randint(0,len(Repo.words))
    print randInt, top

它产生这个输出:(1037是数据库中元素的数量)

...
214 1037
731 1037
46 1037
490 1037
447 1037
103 1037
342 1037
547 1037
565 1037
90 1037
...

你去我用这个'菜单相似的功能'来调用这个功能

def gameMenu():
"""Game Menu"""

gameMenuPrint()

def m():
    inp = raw_input('enter option: ')
    while inp != 'q':
        if inp == 'play' or inp =='1': GameC.wGen()
        elif inp == 'help' or inp =='2': pass
        elif inp == 'back' or inp =='0': mainMenu()
        else:
            print 'wrong input!'
            inp = raw_input('enter valid a option!: ')
m()

2 个答案:

答案 0 :(得分:4)

这部分是问题所在:

def m():
    inp = raw_input('enter option: ')
    while inp != 'q':
        if inp == 'play' or inp =='1': GameC.wGen()
        elif inp == 'help' or inp =='2': pass
        elif inp == 'back' or inp =='0': mainMenu()
        else:
            print 'wrong input!'
            inp = raw_input('enter valid a option!: ')

在进入循环之前,您要求raw_input。进入循环后,您再也不会要求输入。将其更改为:

def m():
    inp = raw_input('enter option: ')
    while inp != 'q':
        if inp == 'play' or inp =='1': GameC.wGen()
        elif inp == 'help' or inp =='2': pass
        elif inp == 'back' or inp =='0': mainMenu()
        else:
            print 'wrong input!'
        inp = raw_input('enter option: ')

虽然我其实更喜欢这个:

def m():
    while True:
        inp = raw_input('enter option: ')
        if inp == 'q': break
        elif inp == 'play' or inp =='1': GameC.wGen()
        elif inp == 'help' or inp =='2': pass
        elif inp == 'back' or inp =='0': mainMenu()
        else:
            print 'wrong input!'

答案 1 :(得分:0)

while条件总是为真,除非它们在第一个raw_input中输入'q'。你永远不会获得inp的新值。在while循环中添加另一个raw_input。