鱼C论坛

 找回密码
 立即注册
查看: 2471|回复: 4

[已解决]P7讲 关于优化猜数字游戏,需要帮助

[复制链接]
发表于 2020-5-4 16:15:06 | 显示全部楼层 |阅读模式

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

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

x
我想自己增加一个功能,“不仅提示大小,还提示剩余猜测的次数”,

想实现的功能是,如果输入的数字小于8.就提示,‘’小了,你还有2次机会'

又因为手误输成了一个小于8的数。系统继续提示,并且反馈剩余次数。

写出了如下的代码,但是,实现不了这个功能。我知道自己错在哪里但是不知道应该怎么套用循环。

“如果我的第二次再输入一个小于8的数,我仍然能得到“'小了,你还有2次机会”,但是很明显,这应该是第二次了”,所以,我想着 如果,这个时候的循环C 是等于2的,那么就应该输出,'都已经说小了呀,你是因为手误输错的吗?那再给你一次机会吧!'),但是为什么没有实现呢?


c = 3
while c > 0:
    i = input('请输入一个0到10的数字:')
    a = int(i)
    if a == 8:
        print('猜的真准')
        break
    else:
        if a < 8:
            print('小了,你还有2次机会')
            c = c -1
            if c == 2:
                print('都已经说小了呀,你是因为手误输错的吗?那再给你一次机会吧!')

            if c == 1:
                print('又输错了,抱歉你的机会已用完!')
        else:
            if a > 8:
                print('大了,你还有2次机会')
            if c == 2:
                print('都已经说大了呀,你是因为手误输错的吗?那再给你一次机会吧!')

            if c == 1:
                print('又输错了,抱歉你的机会已用完')
        c = c - 1
print('游戏结束')
最佳答案
2020-5-4 17:18:07
本帖最后由 Hoiste 于 2020-5-4 17:27 编辑

你需要另一个变量来存储上一次的输入才能进行所需要的对比,代码我稍微改了,加了点注释,应该没有超纲的。
c = 3
j = ''  # 用于存储上一次的输入值,为防止每一次都被初始化为空,放在循环外面
while c > 0:
    i = input('请输入一个0到10的数字:')
    a = int(i)
    if a == 8:
        print('猜的真准')
        break
    
    else:
        c -= 1
        if a < 8:
            print('小了,',end = '')
            if j:#第一次输入的时候j是空字符,所以j会判定为False,完成第一次输入后j拥有了上一次的输入值,则开始按要求判断
                if a < j and j < 8:  # 为什么要加and后面的语句?试试看删掉and j < 8和下面and j > 8后分别输入11,12,5的情况就动了。
                        print('都已经说小了呀,你是因为手误输错的吗?那再给你一次机会吧!')
                        c += 1
                
        if a > 8:
            print('大了,',end = '')
            if j:
                if a > j and j > 8:
                        print('都已经说大了呀,你是因为手误输错的吗?那再给你一次机会吧!')
                        c += 1

    if c == 0:
        print('机会用完了')
        break
                
    print('你还有',c,'次机会')
    j = a

print('游戏结束')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-4 16:19:23 | 显示全部楼层
我需要在print 那里 把“当前状态下的C的数值,” 也放入print内么,    比如     第一次输入小了,C就=2了  ,print"都已经说小了呀,你是因为手误输错的吗?那再给你 'c' 次机会吧!" 是这个逻辑?这样的语句没有问题吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-4 17:18:07 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Hoiste 于 2020-5-4 17:27 编辑

你需要另一个变量来存储上一次的输入才能进行所需要的对比,代码我稍微改了,加了点注释,应该没有超纲的。
c = 3
j = ''  # 用于存储上一次的输入值,为防止每一次都被初始化为空,放在循环外面
while c > 0:
    i = input('请输入一个0到10的数字:')
    a = int(i)
    if a == 8:
        print('猜的真准')
        break
    
    else:
        c -= 1
        if a < 8:
            print('小了,',end = '')
            if j:#第一次输入的时候j是空字符,所以j会判定为False,完成第一次输入后j拥有了上一次的输入值,则开始按要求判断
                if a < j and j < 8:  # 为什么要加and后面的语句?试试看删掉and j < 8和下面and j > 8后分别输入11,12,5的情况就动了。
                        print('都已经说小了呀,你是因为手误输错的吗?那再给你一次机会吧!')
                        c += 1
                
        if a > 8:
            print('大了,',end = '')
            if j:
                if a > j and j > 8:
                        print('都已经说大了呀,你是因为手误输错的吗?那再给你一次机会吧!')
                        c += 1

    if c == 0:
        print('机会用完了')
        break
                
    print('你还有',c,'次机会')
    j = a

print('游戏结束')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-4 17:59:02 | 显示全部楼层
Hoiste 发表于 2020-5-4 17:18
你需要另一个变量来存储上一次的输入才能进行所需要的对比,代码我稍微改了,加了点注释,应该没有超纲的。 ...

你好,很感谢你的帮助,
我试运行了一下。发现有bug,第2次提示错误了、应该是还剩一次。
然后我输入大于8的数字。居然也可以输入3次、、、尴尬。如下是我的运行结果。


请输入一个0到10的数字:3
小了,你还有 2 次机会
请输入一个0到10的数字:2
小了,都已经说小了呀,你是因为手误输错的吗?那再给你一次机会吧!
你还有 2 次机会
请输入一个0到10的数字:9
大了,你还有 1 次机会
请输入一个0到10的数字:10
大了,都已经说大了呀,你是因为手误输错的吗?那再给你一次机会吧!
你还有 1 次机会
请输入一个0到10的数字:10
大了,机会用完了
游戏结束

存在这样2个bug   
1输入 一个小于8 的数时, 例如7  我可以从7输入到0    8次机会 并且没有输出提示“
2输入 7 6 9 10  可以有4次机会
         7 9  10   8 同理也是4次。

我的期望是 总共只有三次机会。
————————————————————————————————————————————————
非常感谢你的帮助,,对于我的猜想,给于了肯定,
居然真的可以 print('你还有',c,'次机会')   学到了新的知识。(我是真的零基础,,就是喜欢举一反三,考一下自己,验证自己的想法。当然了这样很纠结。)给你添麻烦了。





想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-4 21:06:08 | 显示全部楼层
haogetsh 发表于 2020-5-4 17:59
你好,很感谢你的帮助,
我试运行了一下。发现有bug,第2次提示错误了、应该是还剩一次。
然后我输入大 ...

第一个也不能说是bug,应该说我理解为再给一次机会就是在我误输的时候不扣除机会,也就是保持当前机会次数的。如果这个不符合你的想法的话只要把两个c += 1去掉就可以了。
另外一个问题是代码仓促写的所以必然还有瑕疵,你可以试着完善一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 18:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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