鱼C论坛

 找回密码
 立即注册
查看: 1788|回复: 3

[已解决]自己瞎琢磨的代码出了点小bug,实在不知道错在哪,求大佬指教!

[复制链接]
发表于 2020-2-22 21:34:05 | 显示全部楼层 |阅读模式

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

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

x
    本人小白,是在学零基础入门python 的时候跟着小甲鱼写的一个小游戏,然后没事的时候想完善一下,自己瞎琢磨写了半天,发现好像能用,但测试的时候又发现有莫名其妙的bug

代码如下:

  1. print ("""玩个游戏吧!猜猜我在想哪一个数字
  2. 提示:这个数的绝对值小于一百
  3. 你只有十次机会哟!""")
  4. import random
  5. t=1
  6. s=input(":")

  7. while 1:
  8.     if s=='':
  9.         print("请输入一个整数")
  10.         s=input(":")
  11.         continue
  12.     if s[0]=="-":
  13.         s = s[1:]
  14.         if s.isdigit():#去掉负号后,检测是否为一个正整数
  15.             shuru = int(s)
  16.             shuru=shuru*-1
  17.             break
  18.         else:
  19.             print("输入错误!请输入一个整数")
  20.             s=input(":")
  21.             continue
  22.     else:
  23.         while not s.isdigit():#检测是否为一个正整数
  24.             print("输入错误!请输入一个整数")
  25.             s=input(":")
  26.             continue
  27.         shuru = int(s)
  28.         break

  29. d=random.randint(-100,100)  #生成随机数
  30. if shuru == d:       #第一次直接猜对
  31.     print ("我靠!你作弊了吧,一次就猜对!?")
  32. else :
  33.     while shuru!=d:
  34.         t+=1
  35.         c=shuru - d
  36.         if t>10:#总共十次机会,次数大于10,自动退出
  37.             print ("次数用光了哦")
  38.             break
  39.         elif (c >0) and (c<=10):
  40.             print("很接近了,但还是大了一点")
  41.         elif (c>10):
  42.             print ("太大了,再猜")
  43.         elif (c<0) and (c>=-10):
  44.             print ("差一点,不过小了")
  45.         elif (c<-10):
  46.             print ("太小了,再想想")

  47.         s=input(":")
  48.         while 1:
  49.             if s=='':
  50.                 print("请输入一个整数")
  51.                 s=input(":")
  52.                 continue
  53.             if s[0]=="-":
  54.                 temp=s[1:]
  55.                 s=temp
  56.                 if s.isdigit():#去掉负号后,检测是否为一个正整数
  57.                     shuru = int(s)
  58.                     shuru=shuru*-1
  59.                     break
  60.                 else:
  61.                     print("输入错误!请输入一个整数")
  62.                     s=input(":")
  63.                     continue
  64.             else:
  65.                 while not s.isdigit():#检测是否为一个正整数
  66.                     print("输入错误!请输入一个整数")
  67.                     s=input(":")
  68.                     continue
  69.                 shuru = int(s)
  70.                 break

  71.         if shuru==d:
  72.             print("恭喜你,终于猜对了")
  73. print ("游戏结束,给自己鼓个掌吧!")
复制代码


    本来想用s.isdigit()  来判断字符串是否是整数,但它不能识别负数,所以我就想如果我输入一个负数,能不能先去掉负号之后再用s,isdigit()判断,判断之后再乘负一。用尽了毕生所学写出来之后运行,发现输入负数就没有问题了,可以正常游戏,
    然后问题就出现了,如果先输入一个字母或符号,会打印“输入错误!请输入一个整数”,这没问题,问题是接下来如果再输入一个负数,它还是会打印“输入错误!请输入一个整数”,再输入一个负数也一样。
但如果我接下来输入一个0或者正数,它又会恢复正常,之后再输入负数也没问题了。
    运行结果如下
  1. 玩个游戏吧!猜猜我在想哪一个数字
  2. 提示:这个数的绝对值小于一百
  3. 你只有十次机会哟!
  4. :-9
  5. 很接近了,但还是大了一点
  6. :p
  7. 输入错误!请输入一个整数
  8. :-9
  9. 输入错误!请输入一个整数
  10. :0
  11. 太大了,再猜
  12. :-9
  13. 很接近了,但还是大了一点
  14. :'
  15. 输入错误!请输入一个整数
  16. :-9
  17. 输入错误!请输入一个整数
  18. :0
  19. 太大了,再猜
  20. :-15
  21. 很接近了,但还是大了一点
  22. :-17
  23. 很接近了,但还是大了一点
  24. :-19
  25. 差一点,不过小了
  26. :-18
  27. 恭喜你,终于猜对了
  28. 游戏结束,给自己鼓个掌吧!
复制代码

    之后在网上查到可以用try/except来解决s.isdigit()只能识别正整数的问题,但如果找不到我自己写的问题在哪,真的很苦恼。
    我看了好多遍也没发现问题在哪,跪求大佬指教!
最佳答案
2020-2-22 22:08:04
本帖最后由 jackz007 于 2020-2-22 22:19 编辑

        楼主试试这个代码,看看是否存在你说的问题。
  1. #-*-coding:gbk-*-

  2. import random

  3. print ("""玩个游戏吧!猜猜我在想哪一个数字
  4. 提示:这个数的绝对值小于一百
  5. 你只有十次机会哟!""")

  6. d = random . randint(-100 , 100)
  7. t = 1
  8. f = False
  9. while t < 10:
  10.     s = input('请输入一个整数:') . strip()
  11.     if len(s) > 0:
  12.         try:
  13.             x = int(s)
  14.             if abs(x) < 101:
  15.                 t += 1
  16.                 if x == d:
  17.                     if t < 2:
  18.                         print ("我靠!你作弊了吧,一次就猜对!?\n")
  19.                     else:
  20.                         print("恭喜你,终于猜对了!\n")
  21.                     f = True
  22.                     break
  23.                 else:
  24.                     c = abs(x - d)
  25.                     if x > d:
  26.                         if c > 10:
  27.                             print ("太大了,再猜!\n")
  28.                         else:
  29.                             print ("大了一点点,再猜!\n")
  30.                     else:
  31.                         if c > 10:
  32.                             print ("太小了,再猜!\n")
  33.                         else:
  34.                             print ("小了一点点,再猜!\n")
  35.             else:
  36.                 print('超出有效范围[-100 , 100]!\n')
  37.                 continue
  38.         except:
  39.             print('错误:输入的不是整数!\n')
  40.             continue
  41.     else:
  42.         break
  43. if f:
  44.     print ("游戏结束,给自己鼓个掌吧!")
  45. else:
  46.     print ("游戏结束,下次努力吧!")
复制代码

        运行实况:
  1. C:\Bin>python x.py
  2. 玩个游戏吧!猜猜我在想哪一个数字
  3. 提示:这个数的绝对值小于一百
  4. 你只有十次机会哟!
  5. 请输入一个整数:58
  6. 太大了,再猜!

  7. 请输入一个整数:18
  8. 太小了,再猜!

  9. 请输入一个整数:38
  10. 大了一点点,再猜!

  11. 请输入一个整数:34
  12. 大了一点点,再猜!

  13. 请输入一个整数:32
  14. 大了一点点,再猜!

  15. 请输入一个整数:31
  16. 恭喜你,终于猜对了!

  17. 游戏结束,给自己鼓个掌吧!

  18. C:\Bin>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-22 22:08:04 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-2-22 22:19 编辑

        楼主试试这个代码,看看是否存在你说的问题。
  1. #-*-coding:gbk-*-

  2. import random

  3. print ("""玩个游戏吧!猜猜我在想哪一个数字
  4. 提示:这个数的绝对值小于一百
  5. 你只有十次机会哟!""")

  6. d = random . randint(-100 , 100)
  7. t = 1
  8. f = False
  9. while t < 10:
  10.     s = input('请输入一个整数:') . strip()
  11.     if len(s) > 0:
  12.         try:
  13.             x = int(s)
  14.             if abs(x) < 101:
  15.                 t += 1
  16.                 if x == d:
  17.                     if t < 2:
  18.                         print ("我靠!你作弊了吧,一次就猜对!?\n")
  19.                     else:
  20.                         print("恭喜你,终于猜对了!\n")
  21.                     f = True
  22.                     break
  23.                 else:
  24.                     c = abs(x - d)
  25.                     if x > d:
  26.                         if c > 10:
  27.                             print ("太大了,再猜!\n")
  28.                         else:
  29.                             print ("大了一点点,再猜!\n")
  30.                     else:
  31.                         if c > 10:
  32.                             print ("太小了,再猜!\n")
  33.                         else:
  34.                             print ("小了一点点,再猜!\n")
  35.             else:
  36.                 print('超出有效范围[-100 , 100]!\n')
  37.                 continue
  38.         except:
  39.             print('错误:输入的不是整数!\n')
  40.             continue
  41.     else:
  42.         break
  43. if f:
  44.     print ("游戏结束,给自己鼓个掌吧!")
  45. else:
  46.     print ("游戏结束,下次努力吧!")
复制代码

        运行实况:
  1. C:\Bin>python x.py
  2. 玩个游戏吧!猜猜我在想哪一个数字
  3. 提示:这个数的绝对值小于一百
  4. 你只有十次机会哟!
  5. 请输入一个整数:58
  6. 太大了,再猜!

  7. 请输入一个整数:18
  8. 太小了,再猜!

  9. 请输入一个整数:38
  10. 大了一点点,再猜!

  11. 请输入一个整数:34
  12. 大了一点点,再猜!

  13. 请输入一个整数:32
  14. 大了一点点,再猜!

  15. 请输入一个整数:31
  16. 恭喜你,终于猜对了!

  17. 游戏结束,给自己鼓个掌吧!

  18. C:\Bin>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 22:42:39 | 显示全部楼层
原因找到了,是因为continue放错地方了,哈哈哈低级错误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 22:43:42 | 显示全部楼层
jackz007 发表于 2020-2-22 22:08
楼主试试这个代码,看看是否存在你说的问题。

        运行实况:

感谢解答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-2 19:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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