2012-02-05 5 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

Можете ли вы показать код вызова? –

+0

Функция, которую вы даете, работает для меня. Проблема в другом месте. – a3nm

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

well idont call for m() i cal для игрыMenu() ... посмотреть снова –

+0

@ БогданМайер, что? Вы поняли мой ответ или нет? –

+0

Спасибо, я понял это после wGen(), я забыл вернуться к emnu и зацикленный навсегда спасибо, вы указали это правильно :) спасибо –

0

Условие при этом всегда будет справедливо, если они не войдут «Q» в первом raw_input. Вы никогда не получите новое значение для inp. Добавьте еще один raw_input в цикл while.

Смежные вопросы