2012-02-05 287 views
-1

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

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() 
+1

你可以显示调用代码吗? – 2012-02-05 01:23:06

+0

你给的作品适合我。问题在别的地方。 – a3nm 2012-02-05 01:24:49

+0

我使用调用函数的代码编辑我的帖子。这是你的意思吗? – 2012-02-05 01:37:49

回答

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

虽然我其实比较喜欢这样的:除非他们在第一个进入的raw_input“Q”

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!' 
+0

好的idont调用m()i cal for gameMenu()...再看一遍 – 2012-02-05 01:44:10

+0

@ BogdanMaier是什么?你明白我的答案吗? – 2012-02-05 01:45:55

+0

谢谢,我在wGen()后发现它忘了返回emnu,并且永远感谢你,你指出它正确:)谢谢 – 2012-02-05 01:52:06

0

while条件永远是正确的。你从来没有为inp获得新的价值。将另一个raw_input添加到while循环中。