shigure_takimi 发表于 2023-3-6 09:01:25

大家能帮我看看问题出在哪里吗。

import random


def getNumber():
    number = list('0123456789')
    random.shuffle(number)
    return number[:4]

def check(myNumber, number):
    A = 0
    B = 0
    for i in myNumber:
      if i in number:
            if myNumber.index(i) == number.index(i):
                A += 1
            else:
                B += 1
    return str(A)+'A'+str(B)+'B'

def showGameRule():
    print('''游戏规则(略)''')

def game():
    showGameRule()
    number = getNumber()
    print(number)
    gameOver = False
    count = 0
    while not gameOver:
      myNumber = input('请输入四个不同的数字:')
      result = check(myNumber, number)
      count += 1
      print(f'第{count}次:{result}')
      if result == '4A0B':
            print('你已经猜到了正确的结果。')
            quitOrNot = input('是否继续?继续请按Y,其他键退出')
            if quitOrNot not in ['Y','y']:
                print('不玩了。退出游戏。')
                gameOver = True
            else:
                print('再玩一次。')
                game()

if __name__ == '__main__':
    game()


编了一段小代码。简单说问题是:
1、第一次猜对数字,直接不玩了,就正常退出了。
2、第一次猜对数字后,输入"Y"再玩一次,再猜对了,再选不玩,就不能正常推出了,继续让我输入数字。不知道为什么。

游戏规则(略)
['5', '4', '7', '3']
请输入四个不同的数字:5473
第1次:4A0B
你已经猜到了正确的结果。
是否继续?继续请按Y,其他键退出y
再玩一次。
游戏规则(略)
['9', '2', '5', '4']
请输入四个不同的数字:9254
第1次:4A0B
你已经猜到了正确的结果。
是否继续?继续请按Y,其他键退出n
不玩了。退出游戏。
请输入四个不同的数字:

isdkz 发表于 2023-3-6 11:31:59

因为你用了递归调用,当返回上一层函数的时候 gameOver 的值还是 False,

你可以把 gameOver 设为全局变量
import random


def getNumber():
    number = list('0123456789')
    random.shuffle(number)
    return number[:4]

def check(myNumber, number):
    A = 0
    B = 0
    for i in myNumber:
      if i in number:
            if myNumber.index(i) == number.index(i):
                A += 1
            else:
                B += 1
    return str(A)+'A'+str(B)+'B'

def showGameRule():
    print('''游戏规则(略)''')

def game():
    global gameOver                                                    # 加了这一行
    showGameRule()
    number = getNumber()
    print(number)
    gameOver = False
    count = 0
    while not gameOver:
      myNumber = input('请输入四个不同的数字:')
      result = check(myNumber, number)
      count += 1
      print(f'第{count}次:{result}')
      if result == '4A0B':
            print('你已经猜到了正确的结果。')
            quitOrNot = input('是否继续?继续请按Y,其他键退出')
            if quitOrNot not in ['Y','y']:
                print('不玩了。退出游戏。')
                gameOver = True
            else:
                print('再玩一次。')
                game()

if __name__ == '__main__':
    game()

shigure_takimi 发表于 2023-3-7 08:55:54

isdkz 发表于 2023-3-6 11:31
因为你用了递归调用,当返回上一层函数的时候 gameOver 的值还是 False,

你可以把 gameOver 设为全局变 ...

感谢!问题已解决。
我也觉得肯定跟我调用game()有关系。
但是一直没有想明白,我想的是调用game(),gameOver不就重置为False了吗。
现在明白了,原来递归调用的时候也是像循环一样,有内层、外层的。
谢谢!
页: [1]
查看完整版本: 大家能帮我看看问题出在哪里吗。