鱼C论坛

 找回密码
 立即注册
查看: 720|回复: 5

[已解决]发现BUG,尝试解决后还是有BUG,求助

[复制链接]
发表于 2018-12-23 19:20:42 | 显示全部楼层 |阅读模式

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

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

x
BUG是出现在零基础入门学习Python第5讲后的课后练习题的动动手答案:
import random

times = 3
secret = random.randint(1,10)

print('------------------我爱鱼C工作室------------------')
guess = 0
print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")

while (guess != secret) and (times > 0):
    temp = input()
   
    if temp.isdigit():
        guess = int(temp)
        if guess == secret:
            print("我草,你是小甲鱼心里的蛔虫吗?!")
            print("哼,猜中了也没有奖励!")
        else:
            if guess > secret:
                print("哥,大了大了~~~")
            else:
                print("嘿,小了,小了~~~")
            if times > 1:
                print("再试一次吧:", end='')
            else:
                print("机会用光咯T_T")
    else:
        print("抱歉,您的输入有误,请输入一个整数:", end='')

    times = times - 1 # 用户每输入一次,可用机会就-1

print("游戏结束,不玩啦^_^")

当我一直输入浮点型时产生了BUG:
------------------我爱鱼C工作室------------------
不妨猜一下小甲鱼现在心里想的是哪个数字: 3.2
抱歉,您的输入有误,请输入一个整数:3.2
抱歉,您的输入有误,请输入一个整数:3.2
抱歉,您的输入有误,请输入一个整数:游戏结束,不玩啦^_^
>>>
我觉得应该要这样:
------------------我爱鱼C工作室------------------
不妨猜一下小甲鱼现在心里想的是哪个数字: 3.2
抱歉,您的输入有误,请输入一个整数:3.2
抱歉,您的输入有误,请输入一个整数:3.2
游戏结束,不玩啦^_^
>>>
修复时的代码:

import random

wrong = 3#让玩家有3次输路类型错误的机会
times = 5
secret = random.randint(1,100)

print("--------Rqyquaza的第一个小游戏--------")
guess = 0
print("猜一下我心里想的是什么数字:", end=" ")

while (guess !=secret) and (times > 0):
    temp = input()
   
    if temp.isdigit():
        guess = int(temp)
        if guess == secret:
            print("猜对了,但没有奖励QAQ")
        else:
            if guess > secret:
                 print("大锅,大了大了~~~~")
            else:
                 print("兄得,小了小了~~~~")
            if times > 1:
                 print("再试一次吧:", end=" ")
            else:
                 print("机会用光光了T-T,正确答案是:")
                 print(secret)
    else:                                                            
        print("您的输入有误,请输入一锅整数:")
    if wrong == 2:  
        print("程序并不支持你输入的数:")
    if wrong == 0:
        print("你还真是倔强啊!拜拜!")
        
    wrong = wrong - 1
    times = times - 1
   
print("结束")
   
一直输路浮点型:

        --------Rqyquaza的第一个小游戏--------
猜一下我心里想的是什么数字: 3.2
您的输入有误,请输入一锅整数:
3.2                                                 #这里输路的答案不应该在这
您的输入有误,请输入一锅整数:
程序并不支持你输入的数:               #这里发生了重复
3.2
您的输入有误,请输入一锅整数:
3.2
您的输入有误,请输入一锅整数:
你还真是倔强啊!拜拜!

有木有大佬帮我一下,并截图新的代码和一直输路浮点型时运行的东东。


最佳答案
2018-12-23 19:45:29
本帖最后由 heidern0612 于 2018-12-23 20:03 编辑

你想输入浮点型数字,抱歉输入不了。

因为ramdom模块引入的randint方法就是整数,不支持浮点。

如果支持浮点型随机,那python就太不严谨了,小数点后有无限位数,python怎么选择判断?


有思维是好的,但是思维有漏洞,除非你可以重新写个模块,限定下小数点后的位数。


如果你不想输入有误换行的话,可以这么写print("您的输入有误,请输入一个整数",end = " ")



上述发生重复是因为你当前while循环判定条件并不符合退出,所以一直在重复。

当你 guess == secret  and  time = 0的时候,循环才会退出。(这里应该用or ,不应该用and。)


另外,如果你想wrong == 0的时候,程序退出,就在wrong == 0的下面,break程序。





按你的要求给你写的小程序,只能判定整数,带输入三次错误类型机会和5次猜错机会。


  1. import random

  2. wrong = 3#让玩家有3次输路类型错误的机会
  3. times = 5
  4. secret = random.randint(1,100)

  5. print("--------Rqyquaza的第一个小游戏--------")
  6. guess = 0
  7. print("猜一下我心里想的是什么数字:", end=" ")
  8. while (guess !=secret) or (times > 0):
  9.     temp = input()
  10.     if temp.isdigit():
  11.         guess = int(temp)
  12.         if guess == secret:
  13.             print("猜对了,但没有奖励QAQ")
  14.             break
  15.         else:
  16.             if guess > secret:
  17.                  print("大锅,大了大了~~~~")
  18.             else:
  19.                  print("兄得,小了小了~~~~")
  20.             if times > 1:
  21.                  print("再试一次吧:", end=" ")
  22.             else:
  23.                  print(f"机会用光光了T-T,正确答案是:{secret}")
  24.                  break
  25.     else:
  26.         wrong -= 1
  27.         if wrong == 2:  
  28.             print("您的输入有误,请输入一锅整数:",end = " ")
  29.         elif wrong == 1:
  30.             print("程序并不支持你输入的数:",end = " ")
  31.         elif wrong == 0:
  32.             print("你还真是倔强啊!拜拜!",end = " ")
  33.             break
  34.     times -= 1
  35.    
  36. print("结束")
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-23 19:32:29 | 显示全部楼层
你的理解有误。题目就是叫你猜数字。你输什么 浮点型

想支持 浮点型 自己改下代码不就好了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-23 19:35:12 | 显示全部楼层
哦,看明白了,你是想说
抱歉,您的输入有误,请输入一个整数:游戏结束,不玩啦^_^  不应该在同一行对吧。

print("\n游戏结束,不玩啦^_^")
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-23 19:45:29 | 显示全部楼层    本楼为最佳答案   
本帖最后由 heidern0612 于 2018-12-23 20:03 编辑

你想输入浮点型数字,抱歉输入不了。

因为ramdom模块引入的randint方法就是整数,不支持浮点。

如果支持浮点型随机,那python就太不严谨了,小数点后有无限位数,python怎么选择判断?


有思维是好的,但是思维有漏洞,除非你可以重新写个模块,限定下小数点后的位数。


如果你不想输入有误换行的话,可以这么写print("您的输入有误,请输入一个整数",end = " ")



上述发生重复是因为你当前while循环判定条件并不符合退出,所以一直在重复。

当你 guess == secret  and  time = 0的时候,循环才会退出。(这里应该用or ,不应该用and。)


另外,如果你想wrong == 0的时候,程序退出,就在wrong == 0的下面,break程序。





按你的要求给你写的小程序,只能判定整数,带输入三次错误类型机会和5次猜错机会。


  1. import random

  2. wrong = 3#让玩家有3次输路类型错误的机会
  3. times = 5
  4. secret = random.randint(1,100)

  5. print("--------Rqyquaza的第一个小游戏--------")
  6. guess = 0
  7. print("猜一下我心里想的是什么数字:", end=" ")
  8. while (guess !=secret) or (times > 0):
  9.     temp = input()
  10.     if temp.isdigit():
  11.         guess = int(temp)
  12.         if guess == secret:
  13.             print("猜对了,但没有奖励QAQ")
  14.             break
  15.         else:
  16.             if guess > secret:
  17.                  print("大锅,大了大了~~~~")
  18.             else:
  19.                  print("兄得,小了小了~~~~")
  20.             if times > 1:
  21.                  print("再试一次吧:", end=" ")
  22.             else:
  23.                  print(f"机会用光光了T-T,正确答案是:{secret}")
  24.                  break
  25.     else:
  26.         wrong -= 1
  27.         if wrong == 2:  
  28.             print("您的输入有误,请输入一锅整数:",end = " ")
  29.         elif wrong == 1:
  30.             print("程序并不支持你输入的数:",end = " ")
  31.         elif wrong == 0:
  32.             print("你还真是倔强啊!拜拜!",end = " ")
  33.             break
  34.     times -= 1
  35.    
  36. print("结束")
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2018-12-24 13:46:44 | 显示全部楼层
heidern0612 发表于 2018-12-23 19:45
你想输入浮点型数字,抱歉输入不了。

因为ramdom模块引入的randint方法就是整数,不支持浮点。

大佬,你的25行有问题,弄不了,一直报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-24 13:52:00 | 显示全部楼层
Payquaza 发表于 2018-12-24 13:46
大佬,你的25行有问题,弄不了,一直报错


你是3.6版本之前的Python?    这个格式化字符串支持3.6以后的版本。

我python 3.7运行没出错。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-23 03:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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