鱼C论坛

 找回密码
 立即注册
查看: 1903|回复: 12

[已解决]求助

[复制链接]
发表于 2020-5-27 23:45:19 | 显示全部楼层 |阅读模式

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

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

x
temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
while type(temp) != type(1):
    print("抱歉,输入不合法,", end='')
    temp = input("请输入一个整数:")
  在这里 input接受用户输入不都是转换成字符串类型吗
为什么下面的type判断的变量不用转换为整数 ?
最佳答案
2020-11-1 15:52:30
是这样的,大哥,你的这个答案本来就是错误的,你再去认真看看小甲鱼的课后作业
出处为小甲鱼课后作业旧版第5讲动动手0题。以下是全文。
0. 针对视频中小甲鱼提到的小漏洞,再次改进我们的小游戏:当用户输入错误类型的时候,及时提醒用户重新输入,防止程序崩溃。

如果你尝试过以下做法,请举下小手:
temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
# 这种想法是因为 type(1) 会返回 <class 'int'>,如果 type(temp) 返回结果一致说明输入是整数。
while type(temp) != type(1):
    print("抱歉,输入不合法,", end='')
    temp = input("请输入一个整数:")
或者可能这样:
temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
# not操作符的作用是将布尔类型的结果翻转:即取反的意思,not True == Flase
while not isinstance(temp, int):
    print("抱歉,输入不合法,", end='')
    temp = input("请输入一个整数:")
以上方法的思路是正确的,不过似乎忽略了一点儿:就是 input() 的返回值始终是字符串,所以 type(temp) 永远是 <class 'str'>!  
   看清楚了没有,这本来就是错误示范,这个代码本来就是有问题的,有错误的,有漏洞的,
这是小甲鱼特意拿出来给你讲解它错在哪里的示范,本来就不是正确的,你干嘛要去想尽一切办法来解释它是对的,不要曲解小甲鱼的意思。
小甲鱼的意思就一句话,temp永远都是str格式,所以,这个代码type永远返回的都是
<class 'str'>。而不是你说的"我感觉应该是type本身就可以识别吧,或许也就能这样理解了".
认真地对待知识,细心点。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-27 23:54:20 | 显示全部楼层
严格上是需要转换成整数的,但是如果你自行测试的时候,内心一直是按照整数去输入的,也不会出现什么问题。不过为了程序的健壮性,建议加上转int
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-27 23:59:01 | 显示全部楼层
热气球 发表于 2020-5-27 23:54
严格上是需要转换成整数的,但是如果你自行测试的时候,内心一直是按照整数去输入的,也不会出现什么问题。 ...

你说的我知道  我想知道为什么type这里判断不用转换为整数
是不是因为这个type本身就可以识别字符串还是整数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-28 00:02:13 | 显示全部楼层
小诺爷 发表于 2020-5-27 23:59
你说的我知道  我想知道为什么type这里判断不用转换为整数
是不是因为这个type本身就可以识别字符串还是 ...


在这里 input接受用户输入不都是转换成字符串类型吗

对的,input接受用户输入转化为字符串
为什么下面的type判断的变量不用转换为整数 ?
不知道为什么?我也想问这完全没有意义,这个是个死循环,在这个代码基础上 ,type(temp) 永远不可能等于 type(1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-5-28 00:10:38 | 显示全部楼层
Twilight6 发表于 2020-5-28 00:02
对的,input接受用户输入转化为字符串
不知道为什么?我也想问这完全没有意义,这个是个死循环,在 ...

我感觉应该是type本身就可以识别吧
或许也就能这样理解了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-28 00:12:51 | 显示全部楼层
小诺爷 发表于 2020-5-28 00:10
我感觉应该是type本身就可以识别吧
或许也就能这样理解了

type 识别你这代码的  temp,永远为str字符串,不可能为 int整型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-28 00:15:36 | 显示全部楼层
小诺爷 发表于 2020-5-28 00:10
我感觉应该是type本身就可以识别吧
或许也就能这样理解了

这个代码完全就是死循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-28 00:17:29 | 显示全部楼层
小诺爷 发表于 2020-5-28 00:10
我感觉应该是type本身就可以识别吧
或许也就能这样理解了

你别把错误的答案拿去硬着头皮理解...自己误导自己最致命
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-28 00:20:48 | 显示全部楼层
小诺爷 发表于 2020-5-27 23:59
你说的我知道  我想知道为什么type这里判断不用转换为整数
是不是因为这个type本身就可以识别字符串还是 ...

temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
while type(temp) != type(1):
    print("抱歉,输入不合法,", end='')
    temp = input("请输入一个整数:")

temp作为input的返回数据是字符串类型是
type()函数的作用不就是获取数据的类型么?
type(temp)==<class 'str'>
type(1)==<class 'int'>
<class 'int'> !=  <class 'str'> 两个类型是可以比较的吧
while type(temp) != type(1) 这个就是在判断二者的类型是否一致

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

使用道具 举报

发表于 2020-5-28 00:27:46 | 显示全部楼层
小诺爷 发表于 2020-5-28 00:10
我感觉应该是type本身就可以识别吧
或许也就能这样理解了

本身不能识别啊,那个大佬都说了,type识别temp永远为字符串...好死脑筋呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-28 00:52:16 | 显示全部楼层
通过input输入的的确都是字符串形式,因此你这个
while type(temp) != type(1):
    print("抱歉,输入不合法,", end='')
    temp = input("请输入一个整数:")
里面的type(temp)永远都不会等于type(1)。。。这个就是个死循环
你需要在input前面再加个int
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 16:18:37 | 显示全部楼层
本帖最后由 xiaosi4081 于 2020-6-2 16:19 编辑
temp = int(input("不妨猜一下小甲鱼现在心里想的是哪个数字:"))
while type(temp) != type(1):
    print("抱歉,输入不合法,", end='')
    temp = int(input("请输入一个整数:"))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-1 15:52:30 | 显示全部楼层    本楼为最佳答案   
是这样的,大哥,你的这个答案本来就是错误的,你再去认真看看小甲鱼的课后作业
出处为小甲鱼课后作业旧版第5讲动动手0题。以下是全文。
0. 针对视频中小甲鱼提到的小漏洞,再次改进我们的小游戏:当用户输入错误类型的时候,及时提醒用户重新输入,防止程序崩溃。

如果你尝试过以下做法,请举下小手:
temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
# 这种想法是因为 type(1) 会返回 <class 'int'>,如果 type(temp) 返回结果一致说明输入是整数。
while type(temp) != type(1):
    print("抱歉,输入不合法,", end='')
    temp = input("请输入一个整数:")
或者可能这样:
temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
# not操作符的作用是将布尔类型的结果翻转:即取反的意思,not True == Flase
while not isinstance(temp, int):
    print("抱歉,输入不合法,", end='')
    temp = input("请输入一个整数:")
以上方法的思路是正确的,不过似乎忽略了一点儿:就是 input() 的返回值始终是字符串,所以 type(temp) 永远是 <class 'str'>!  
   看清楚了没有,这本来就是错误示范,这个代码本来就是有问题的,有错误的,有漏洞的,
这是小甲鱼特意拿出来给你讲解它错在哪里的示范,本来就不是正确的,你干嘛要去想尽一切办法来解释它是对的,不要曲解小甲鱼的意思。
小甲鱼的意思就一句话,temp永远都是str格式,所以,这个代码type永远返回的都是
<class 'str'>。而不是你说的"我感觉应该是type本身就可以识别吧,或许也就能这样理解了".
认真地对待知识,细心点。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 00:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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