Случайный int бесконечный цикл - PullRequest
0 голосов
/ 05 февраля 2012

Эта функция не останавливается после выбора одного целого числа, она продолжает делать это в бесконечном цикле. Может кто-нибудь сказать мне, почему, или как я могу исправить эту проблему?

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 ]

4 голосов
/ 05 февраля 2012

Эта часть проблемы:

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 голосов
/ 05 февраля 2012

Условие while всегда будет истинным, если они не введут 'q' в первом raw_input.Вы никогда не получите новое значение для INP.Добавьте еще один raw_input в ваш цикл while.

...