鱼C论坛

 找回密码
 立即注册
查看: 1431|回复: 16

[已解决]哥哥们看下这里那里错了,一直循环抱歉输入不合法

[复制链接]
发表于 2020-6-4 16:06:33 | 显示全部楼层 |阅读模式

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

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

x
import random
secret = random.randint(1,10)
print('~~~~~~~~~~~我爱鱼C工作室~~~~~~~~~~~')
temp = input("不妨猜猜小甲鱼现在心里想的是哪个数字:")
while type(temp) != type(1):
    print("抱歉输入不合法")
    temp = input("请输入一个整数:")
    temp = int(temp)
else:
    guess = int(temp)
    while guess != secret:
        temp = input("哎呀,猜错了,请重新输入吧:")
        guess = int(temp)
        if guess == secret:
            print("卧槽,你是小甲鱼心里的蛔虫吗?!")
            print("哼,猜中了也没有奖励!")
        else:
            if guess > secret:
                print("哥,大了大了~~~")
            else:
                print("嘿,小了小了~~~")
print("游戏结束,不玩了^_^")

最佳答案
2020-6-4 16:37:18
import random
secret = random.randint(1,10)
print('~~~~~~~~~~~我爱鱼C工作室~~~~~~~~~~~')
temp = input("不妨猜猜小甲鱼现在心里想的是哪个数字:")
while type(temp) != type(1):
    print("抱歉输入不合法")
    temp = input("请输入一个整数:")
    try:
        temp = int(temp)
    except ValueError:
        pass
else:
    guess = int(temp)
    while guess != secret:
        temp = input("哎呀,猜错了,请重新输入吧:")
        guess = int(temp)
        if guess == secret:
            print("卧槽,你是小甲鱼心里的蛔虫吗?!")
            print("哼,猜中了也没有奖励!")
        else:
            if guess > secret:
                print("哥,大了大了~~~")
            else:
                print("嘿,小了小了~~~")
print("游戏结束,不玩了^_^")
input()
##如果你非要使用type 可以使用try函数
但是可能你又不懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-4 16:08:57 | 显示全部楼层
因为你 input 是接受用户输入并将其转为字符串在赋值给了 temp

所以你的 type(temp) 永远为 字符串 而 type(1) 永远为 整型 导致一直输入不合法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 16:09:52 | 显示全部楼层
不要用type,用isdigit()等函数,以后会学,先帮你改下:
import random
secret = random.randint(1,10)
print('~~~~~~~~~~~我爱鱼C工作室~~~~~~~~~~~')
temp = input("不妨猜猜小甲鱼现在心里想的是哪个数字:")
while not temp.isdigit():
    print("抱歉输入不合法")
    temp = input("请输入一个整数:")
    temp = int(temp)
else:
    guess = int(temp)
    while guess != secret:
        temp = input("哎呀,猜错了,请重新输入吧:")
        guess = int(temp)
        if guess == secret:
            print("卧槽,你是小甲鱼心里的蛔虫吗?!")
            print("哼,猜中了也没有奖励!")
        else:
            if guess > secret:
                print("哥,大了大了~~~")
            else:
                print("嘿,小了小了~~~")
print("游戏结束,不玩了^_^")
或者用try except
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 16:12:45 | 显示全部楼层
本帖最后由 BIO-张磊 于 2020-6-4 16:28 编辑

一直循环说明。一直在这段代码内
while type(temp) != type(1):
    print("抱歉输入不合法")
    temp = input("请输入一个整数:")
    temp = int(temp)
#input的返回值是str,type(temp)是字符串,1是int,type(1)是整型,两者永远不可能相等
但仔细看了一下你的代码,其实有逻辑错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-4 16:14:58 | 显示全部楼层
咋解决呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 16:21:44 | 显示全部楼层

你是看不见楼上回复是吗...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-4 16:29:41 | 显示全部楼层
qiuyouzhi 发表于 2020-6-4 16:21
你是看不见楼上回复是吗...

看到了 不过没懂哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 16:32:01 | 显示全部楼层
萌新1 发表于 2020-6-4 16:29
看到了 不过没懂哈哈

你的报错的原因是因为,你输入一个浮点型的数字的时候,比如3.2
temp = "3.2"
之后你在while循环内 int(temp) 这里会报错的。因为int只能把字符串完全为数字的转化为整型,
int("3.2")错误,但int("3")可以
所以你的代码while那边逻辑是有问题的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-4 16:34:10 | 显示全部楼层
BIO-张磊 发表于 2020-6-4 16:32
你的报错的原因是因为,你输入一个浮点型的数字的时候,比如3.2
temp = "3.2"
之后你在while循环内 int ...

那应该怎么改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 16:34:39 | 显示全部楼层
>>> type(input("请输入:"))
         
请输入:5
<class 'str'>
这就是你错误的原因,我输入了5,但type的类型还是str,而不是int。因为Python中所有通过input进行输入的数据都是字符串形式;
你可以使用isdigit()来判断, isdigit() 方法是检测字符串是否只由数字组成。(如果字符串只包含数字则返回 True 否则返回 False)
既修改为:
while not temp.isdigit():
    print("抱歉输入不合法")
    temp = input("请输入一个整数:")
    temp = int(temp)

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

使用道具 举报

发表于 2020-6-4 16:37:18 | 显示全部楼层    本楼为最佳答案   
import random
secret = random.randint(1,10)
print('~~~~~~~~~~~我爱鱼C工作室~~~~~~~~~~~')
temp = input("不妨猜猜小甲鱼现在心里想的是哪个数字:")
while type(temp) != type(1):
    print("抱歉输入不合法")
    temp = input("请输入一个整数:")
    try:
        temp = int(temp)
    except ValueError:
        pass
else:
    guess = int(temp)
    while guess != secret:
        temp = input("哎呀,猜错了,请重新输入吧:")
        guess = int(temp)
        if guess == secret:
            print("卧槽,你是小甲鱼心里的蛔虫吗?!")
            print("哼,猜中了也没有奖励!")
        else:
            if guess > secret:
                print("哥,大了大了~~~")
            else:
                print("嘿,小了小了~~~")
print("游戏结束,不玩了^_^")
input()
##如果你非要使用type 可以使用try函数
但是可能你又不懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 16:40:32 | 显示全部楼层

你可以用字符串方法判断字符串内是不是全是 数字  

isdigit()   如果字符串只包含数字则返回 True,否则返回 False。

把  while type(temp) != type(1) 改成 while not temp.isdigit() 即可

完整代码:
import random
secret = random.randint(1,10)
print('~~~~~~~~~~~我爱鱼C工作室~~~~~~~~~~~')
temp = input("不妨猜猜小甲鱼现在心里想的是哪个数字:")
while not temp.isdigit():
    print("抱歉输入不合法")
    temp = input("请输入一个整数:")
    temp = int(temp)
else:
    guess = int(temp)
    while guess != secret:
        temp = input("哎呀,猜错了,请重新输入吧:")
        while not temp.isdigit():
            print("抱歉输入不合法")
            temp = input("请输入一个整数:")
            temp = int(temp)
        guess = int(temp)
        if guess == secret:
            print("卧槽,你是小甲鱼心里的蛔虫吗?!")
            print("哼,猜中了也没有奖励!")
        else:
            if guess > secret:
                print("哥,大了大了~~~")
            else:
                print("嘿,小了小了~~~")
print("游戏结束,不玩了^_^")

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

使用道具 举报

 楼主| 发表于 2020-6-4 16:41:20 | 显示全部楼层
yhhpf 发表于 2020-6-4 16:34
这就是你错误的原因,我输入了5,但type的类型还是str,而不是int。因为Python中所有通过input进行输入的 ...

这样用户输入数字可以运行,输入汉字的话第一次会提醒“”抱歉输入不合法“再次输入汉字或者数字就报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 16:41:20 | 显示全部楼层
本帖最后由 BIO-张磊 于 2020-6-4 16:43 编辑


我给你发的代码,try语句是纠错语句,如果你要保留你现有的想法完成的代码逻辑,只能用try语句,你可以把我给你发的跟你的源代码对比一下,其实就只多了一个tyr except。
你的问题请看11楼,满意请采纳
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 16:43:32 | 显示全部楼层
#-*-coding:gbk-*-
import random
secret = random.randint(1 , 10)
print('~~~~~~~~~~~我爱鱼C工作室~~~~~~~~~~~')
while True :
    while True :
        temp = input("不妨猜猜小甲鱼现在心里想的是哪个数字:")
        if temp . isdigit() : break
        print('抱歉输入不合法')
    guess = int(temp)
    if guess == secret :
        print("卧槽,你是小甲鱼心里的蛔虫吗?!")
        print("哼,猜中了也没有奖励!")        
        break
    else :
        if guess > secret : print("哥,大了大了~~~")
        else : print("嘿,小了小了~~~")
        print()
print("游戏结束,不玩了^_^")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 16:52:24 | 显示全部楼层
萌新1 发表于 2020-6-4 16:41
这样用户输入数字可以运行,输入汉字的话第一次会提醒“”抱歉输入不合法“再次输入汉字或者数字就报错
while not temp.isdigit():
    print("抱歉输入不合法")
    temp = input("请输入一个整数:")
下面那句temp = int(temp)要去掉,放到这个循环结束之后再int,
因为你输入中文的时候他会去执行这句,此时temp变成了Int类型,然后进入循环是回调用temp.isdigit(),
而isdigit是输入字符串的方法,Int是无法使用的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-4 16:53:55 | 显示全部楼层

感谢老哥,你这个更简单点哈哈,不过刚没注意到采纳另外一个老哥的了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 00:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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