Вернуться в меню после команды? питон - PullRequest
0 голосов
/ 02 апреля 2011

Я знаю, что все мои вопросы очень просты, но я новичок, так что вот оно ... После того, как всякая помощь помогла мне, я разрабатываю функцию угадывания чисел, но затем хочу вернуться в меню, которое только что было оставлено. Вот код:

import time
import random
animalmenu()

def animalmenu():
    print()
    print()
    print()
    print()
    print('Welcome to the menu. I am thinking of a menu. Select the option\'s below to       try and guess my animal.')
    print()
    print('a) No. of Legs')
    print('b) Type of animal')
    print('c) Preffered Climate')
    print('d) Size')
    print('e) Colour')
    print('f) Diet')
    print('g) Habitat')
    print('h) Can be kept as pet')
    print('i) Guess animal')
    print()
    print('When in a menu, type in \'555\' to return here')
    AniChoice = input('Choose your option: ')
    if AniChoice == 'a':
        loop = 10
        while loop == 10:
            print()
            print('')
            print()
            guessleg = int(input('Guess the number of legs: '))
            if leg == guessleg:
                print('True')
            elif leg != guessleg:
                print('False')
             print('r = Return to menu, g = guess again.')
             rg = input()
             if rg == 'g':
                 print('Loading...')
             elif rg == 'r':
                 loop = 0
                 time.sleep(1)
                 print('Returning to menu...')
                 time.sleep(1)
                 animalmenu()

каждый раз, когда я запускаю его, я набираю число в соответствии с запросом кода, но затем вместо того, чтобы спрашивать, хочу ли я вернуться в меню, он просто снова и снова задает вопрос: «Угадай количество ног:». Я знаю, что это как-то связано с моим методом зацикливания, но я не понимаю, и из-за целочисленной установки я не могу просто сделать другой, если, например, так:

            guessleg = int(input('Guess the number of legs: '))
            if leg == guessleg:
                print('True')
            elif leg != guessleg:
                print('False')
            elif guessleg == 'back':
                    loop = 0                    
                animalmenu()

И я не вижу другого способа сделать это, так как ни один из способов не работает? Как бы вы предложили вернуться в animalmenu ()?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2011

Как говорится в сообщении, «назад» не является целым числом, но вы сравниваете его с переменной, в которую вы положили целочисленное значение. Конкретно ваша линия:

guessleg = int(input('Guess the number of legs: '))

помещает целое значение в догадку (или, точнее, пытается) из пользовательского ввода.

Один из подходов к решению этой проблемы состоит в том, чтобы записать вводимые пользователем данные в строковую переменную, сначала сравнить эту строку со значением «назад», а затем при необходимости преобразовать в целое число.

Другой подход состоит в том, чтобы обернуть попытку / исключение вокруг целочисленного преобразования и продолжить целочисленную проверку, если преобразование прошло успешно, и проверку на «назад», если возникла исключительная ситуация. Это, вероятно, предпочтительнее в наши дни, и я поместил это в код:

inp_val = raw_input('Guess the number of legs: ')
try:
    guess_num = int(inp_val)
    if guess_num == leg:
        print('True')
    else:
        print('False')
except ValueError:
    if inp_val == 'back':
        loop = 0
    else:
        print 'Invalid entry'
    animalmenu()
0 голосов
/ 02 апреля 2011

потому что вы преобразуете свой ввод в целое число и сохраняете его в guessleg, что означает, что guessleg также является целым числом.Тем не менее, 'back' является строкой.Вы не можете сравнить строку с целым числом.3 == 'back' ничего не значит.и синтаксическая ошибка может из-за вашего отступа.

ОБНОВЛЕНИЕ:

Если вы хотите вернуться в главное меню, вы можете сделать что-то вроде:

def animalmenu():
  while True:
    print your menu here
    and do something....
    while ...:
      get input and do something...
      if get the input of 'back to menu':
        break

ОБНОВЛЕНИЕ еще раз:

НадеюсьНе думаю, что вы должны использовать input (), попробуйте readline () или raw_input ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...