鱼C论坛

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

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

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

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

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

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

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

while 1:
    if s=='':
        print("请输入一个整数")
        s=input(":")
        continue
    if s[0]=="-":
        s = s[1:]
        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[0]=="-":
                temp=s[1:]
                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()只能识别正整数的问题,但如果找不到我自己写的问题在哪,真的很苦恼。
    我看了好多遍也没发现问题在哪,跪求大佬指教!
最佳答案
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>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 22:42:39 | 显示全部楼层
原因找到了,是因为continue放错地方了,哈哈哈低级错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

        运行实况:

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 12:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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