鱼C论坛

 找回密码
 立即注册
查看: 2195|回复: 2

[已解决]大家能帮我看看问题出在哪里吗。

[复制链接]
发表于 2023-3-6 09:01:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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
不玩了。退出游戏。
请输入四个不同的数字:
最佳答案
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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-7 08:55:54 | 显示全部楼层
isdkz 发表于 2023-3-6 11:31
因为你用了递归调用,当返回上一层函数的时候 gameOver 的值还是 False,

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


感谢!问题已解决。
我也觉得肯定跟我调用game()有关系。
但是一直没有想明白,我想的是调用game(),gameOver不就重置为False了吗。
现在明白了,原来递归调用的时候也是像循环一样,有内层、外层的。
谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-24 09:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表