鲁大头 发表于 2020-2-22 21:34:05

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

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

代码如下:

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

while 1:
    if s=='':
      print("请输入一个整数")
      s=input(":")
      continue
    if s=="-":
      s = s
      if s.isdigit():#去掉负号后,检测是否为一个正整数
            shuru = int(s)
            shuru=shuru*-1
            break
      else:
            print("输入错误!请输入一个整数")
            s=input(":")
            continue
    else:
      while not s.isdigit():#检测是否为一个正整数
            print("输入错误!请输入一个整数")
            s=input(":")
            continue
      shuru = int(s)
      break

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

      s=input(":")
      while 1:
            if s=='':
                print("请输入一个整数")
                s=input(":")
                continue
            if s=="-":
                temp=s
                s=temp
                if s.isdigit():#去掉负号后,检测是否为一个正整数
                  shuru = int(s)
                  shuru=shuru*-1
                  break
                else:
                  print("输入错误!请输入一个整数")
                  s=input(":")
                  continue
            else:
                while not s.isdigit():#检测是否为一个正整数
                  print("输入错误!请输入一个整数")
                  s=input(":")
                  continue
                shuru = int(s)
                break

      if shuru==d:
            print("恭喜你,终于猜对了")
print ("游戏结束,给自己鼓个掌吧!")

    本来想用s.isdigit()来判断字符串是否是整数,但它不能识别负数,所以我就想如果我输入一个负数,能不能先去掉负号之后再用s,isdigit()判断,判断之后再乘负一。用尽了毕生所学写出来之后运行,发现输入负数就没有问题了,可以正常游戏,
    然后问题就出现了,如果先输入一个字母或符号,会打印“输入错误!请输入一个整数”,这没问题,问题是接下来如果再输入一个负数,它还是会打印“输入错误!请输入一个整数”,再输入一个负数也一样。
但如果我接下来输入一个0或者正数,它又会恢复正常,之后再输入负数也没问题了。
    运行结果如下
玩个游戏吧!猜猜我在想哪一个数字
提示:这个数的绝对值小于一百
你只有十次机会哟!
:-9
很接近了,但还是大了一点
:p
输入错误!请输入一个整数
:-9
输入错误!请输入一个整数
:0
太大了,再猜
:-9
很接近了,但还是大了一点
:'
输入错误!请输入一个整数
:-9
输入错误!请输入一个整数
:0
太大了,再猜
:-15
很接近了,但还是大了一点
:-17
很接近了,但还是大了一点
:-19
差一点,不过小了
:-18
恭喜你,终于猜对了
游戏结束,给自己鼓个掌吧!
    之后在网上查到可以用try/except来解决s.isdigit()只能识别正整数的问题,但如果找不到我自己写的问题在哪,真的很苦恼。
    我看了好多遍也没发现问题在哪,跪求大佬指教!

jackz007 发表于 2020-2-22 22:08:04

本帖最后由 jackz007 于 2020-2-22 22:19 编辑

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

import random

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

d = random . randint(-100 , 100)
t = 1
f = False
while t < 10:
    s = input('请输入一个整数:') . strip()
    if len(s) > 0:
      try:
            x = int(s)
            if abs(x) < 101:
                t += 1
                if x == d:
                  if t < 2:
                        print ("我靠!你作弊了吧,一次就猜对!?\n")
                  else:
                        print("恭喜你,终于猜对了!\n")
                  f = True
                  break
                else:
                  c = abs(x - d)
                  if x > d:
                        if c > 10:
                            print ("太大了,再猜!\n")
                        else:
                            print ("大了一点点,再猜!\n")
                  else:
                        if c > 10:
                            print ("太小了,再猜!\n")
                        else:
                            print ("小了一点点,再猜!\n")
            else:
                print('超出有效范围[-100 , 100]!\n')
                continue
      except:
            print('错误:输入的不是整数!\n')
            continue
    else:
      break
if f:
    print ("游戏结束,给自己鼓个掌吧!")
else:
    print ("游戏结束,下次努力吧!")
      运行实况:
C:\Bin>python x.py
玩个游戏吧!猜猜我在想哪一个数字
提示:这个数的绝对值小于一百
你只有十次机会哟!
请输入一个整数:58
太大了,再猜!

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

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

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

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

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

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

C:\Bin>

鲁大头 发表于 2020-2-22 22:42:39

原因找到了,是因为continue放错地方了,哈哈哈低级错误

鲁大头 发表于 2020-2-22 22:43:42

jackz007 发表于 2020-2-22 22:08
楼主试试这个代码,看看是否存在你说的问题。

      运行实况:

感谢解答
页: [1]
查看完整版本: 自己瞎琢磨的代码出了点小bug,实在不知道错在哪,求大佬指教!