自己瞎琢磨的代码出了点小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: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> 原因找到了,是因为continue放错地方了,哈哈哈低级错误 jackz007 发表于 2020-2-22 22:08
楼主试试这个代码,看看是否存在你说的问题。
运行实况:
感谢解答
页:
[1]