命令后返回菜单?Python

0 投票
2 回答
7743 浏览
提问于 2025-04-16 14:57

我知道我问的问题都很简单,但我还是个初学者,所以就直接说吧……

我在大家的帮助下开发了一个猜数字的游戏,但我想在游戏结束后能返回到之前的菜单。以下是我的代码:

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

每次我运行这个程序时,我按照代码的提示输入一个数字,但接下来,它并没有问我是否想返回菜单,而是一直重复问我“猜这个数字有多少条腿:”。我知道这和我的循环方法有关,但我不太明白。而且因为我设置的是整数,所以我不能像这样再加一个if语句:

            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

因为你把输入的内容转换成了整数,并把它存储在 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()。

0

正如消息所说,'back' 不是一个整数,但你却把它和一个存了整数值的变量进行比较。具体来说,你的这一行:

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

是试图从用户输入中把一个整数值放入 guessleg 变量中。

解决这个问题的一种方法是先把用户输入的内容保存在一个字符串变量中,先把这个字符串和 'back' 比较,如果需要再转换成整数。

另一种方法是把整数转换的部分放在一个 try/except 结构里,如果转换成功就继续进行整数的检查,如果遇到错误就进行 'back' 的比较。这种方法现在比较常用,我把它写成了代码:

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

撰写回答