鱼C论坛

 找回密码
 立即注册
查看: 1090|回复: 25

[已解决]python第一版005讲第0题求助

[复制链接]
发表于 2020-5-17 11:25:33 | 显示全部楼层 |阅读模式

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

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

x
各位大佬求助 为什么我用while not isinstance(temp, int),我无论输入一个整数还是字符串都会进入循环呢。代码如下:
  • import random
  • times = 3
  • secret = random.randint(1,10)
  • print('------------------我爱鱼C工作室------------------')
  • guess = 0
  • print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")
  • while (guess != secret) and (times > 0):
  •     temp = input()
  •     while not isinstance(temp,int):
  •         print("字符类型出错,请输入整数:", end = " ")
  •         temp = input()
  •     guess = int(temp)
  •     times = times - 1 # 用户每输入一次,可用机会就-1
  •     if guess == secret:
  •         print("我草,你是小甲鱼心里的蛔虫吗?!")
  •         print("哼,猜中了也没有奖励!")
  •     else:
  •         if guess > secret:
  •             print("哥,大了大了~~~")
  •         else:
  •             print("嘿,小了,小了~~~")
  •         if times > 0:
  •             print("再试一次吧:", end=" ")
  •         else:
  •             print("机会用光咯T_T")
  • print("游戏结束,不玩啦^_^")


执行结果如下:
------------------我爱鱼C工作室------------------
不妨猜一下小甲鱼现在心里想的是哪个数字: 1
字符类型出错,请输入整数: 1
字符类型出错,请输入整数: 1
字符类型出错,请输入整数: 1
字符类型出错,请输入整数: g
字符类型出错,请输入整数: g
字符类型出错,请输入整数: fhfgh
字符类型出错,请输入整数: 1.0
字符类型出错,请输入整数: 2.22
字符类型出错,请输入整数:
最佳答案
2020-5-17 11:37:55
本帖最后由 liuzhengyuan 于 2020-5-17 11:39 编辑
易夜宝福 发表于 2020-5-17 11:36
如果我想用isinstance做判断:
这样可以吗


不可以,因为如果我输入的不是数字
使用 int() 时就会出错
所以python 专门搞了一个 isdigit()

比如
  1. temp = 'a'
  2. guess = int(temp)
复制代码
就会报错

如果帮到你了,就设成最佳吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-17 11:26:16 | 显示全部楼层

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-17 11:26:35 | 显示全部楼层
发代码行的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-17 11:28:33 | 显示全部楼层
代码行如下:
  1. import random
  2. times = 3
  3. secret = random.randint(1,10)
  4. print('------------------我爱鱼C工作室------------------')
  5. guess = 0
  6. print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")
  7. while (guess != secret) and (times > 0):
  8.     temp = input()
  9.     while not isinstance(temp,int):
  10.         print("字符类型出错,请输入整数:", end = " ")
  11.         temp = input()
  12.     guess = int(temp)
  13.     times = times - 1 # 用户每输入一次,可用机会就-1
  14.     if guess == secret:
  15.         print("我草,你是小甲鱼心里的蛔虫吗?!")
  16.         print("哼,猜中了也没有奖励!")
  17.     else:
  18.         if guess > secret:
  19.             print("哥,大了大了~~~")
  20.         else:
  21.             print("嘿,小了,小了~~~")
  22.         if times > 0:
  23.             print("再试一次吧:", end=" ")
  24.         else:
  25.             print("机会用光咯T_T")
  26. print("游戏结束,不玩啦^_^")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-17 11:29:21 | 显示全部楼层

代码如下
  1. import random
  2. times = 3
  3. secret = random.randint(1,10)
  4. print('------------------我爱鱼C工作室------------------')
  5. guess = 0
  6. print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")
  7. while (guess != secret) and (times > 0):
  8.     temp = input()
  9.     while not isinstance(temp,int):
  10.         print("字符类型出错,请输入整数:", end = " ")
  11.         temp = input()
  12.     guess = int(temp)
  13.     times = times - 1 # 用户每输入一次,可用机会就-1
  14.     if guess == secret:
  15.         print("我草,你是小甲鱼心里的蛔虫吗?!")
  16.         print("哼,猜中了也没有奖励!")
  17.     else:
  18.         if guess > secret:
  19.             print("哥,大了大了~~~")
  20.         else:
  21.             print("嘿,小了,小了~~~")
  22.         if times > 0:
  23.             print("再试一次吧:", end=" ")
  24.         else:
  25.             print("机会用光咯T_T")
  26. print("游戏结束,不玩啦^_^")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 11:29:25 | 显示全部楼层
本帖最后由 liuzhengyuan 于 2020-5-17 11:36 编辑

input 输入的是字符串,当然不行
用 isdigit()
  1. temp = input()
  2. while not temp.isdigit():
  3.       ...
复制代码


求【最佳答案】~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 11:33:23 | 显示全部楼层

input默认返回的是字符串,可以用字符串方法:
  1. while not temp.isdigit():
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 11:35:19 | 显示全部楼层


来,给你
  1. import random
  2. times = 3
  3. secret = random.randint(1,10)
  4. print('------------------我爱鱼C工作室------------------')
  5. guess = 0
  6. print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")
  7. while (guess != secret) and (times > 0):
  8.     temp = input()
  9.     try:
  10.         int(temp)
  11.     except:
  12.         print("字符类型出错,请输入整数:", end = " ")
  13.         temp = input()
  14.     guess = int(temp)
  15.     times = times - 1 # 用户每输入一次,可用机会就-1
  16.     if guess == secret:
  17.         print("我草,你是小甲鱼心里的蛔虫吗?!")
  18.         print("哼,猜中了也没有奖励!")
  19.     else:
  20.         if guess > secret:
  21.             print("哥,大了大了~~~")
  22.         else:
  23.             print("嘿,小了,小了~~~")
  24.         if times > 0:
  25.             print("再试一次吧:", end=" ")
  26.         else:
  27.             print("机会用光咯T_T")
  28. print("游戏结束,不玩啦^_^")
复制代码

如果帮到你了,就设成最佳吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-17 11:36:33 | 显示全部楼层
liuzhengyuan 发表于 2020-5-17 11:29
input 输入的是字符串,当然不行
用 isdigit()

如果我想用isinstance做判断:
  1. guess = int(temp)
  2. while not isinstance(guess,int):
复制代码

这样可以吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 11:37:42 | 显示全部楼层
因为input是接受用户输入转为字符串类型返回,temp的类型就为str
  1. isinstance(temp,int)
复制代码

所以这里永远返回的是False
又因为你在前面加了 not  导致永远为True  所以怎么样都可以继续循环了
你可以用字符串方法 isdigit()  这个是直接判断字符串内的字符是否是为数值类型的,若是返回True,否则返回False
  1. while not temp.isdigit():
复制代码

改成这样即可
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 11:37:55 | 显示全部楼层    本楼为最佳答案   
本帖最后由 liuzhengyuan 于 2020-5-17 11:39 编辑
易夜宝福 发表于 2020-5-17 11:36
如果我想用isinstance做判断:
这样可以吗


不可以,因为如果我输入的不是数字
使用 int() 时就会出错
所以python 专门搞了一个 isdigit()

比如
  1. temp = 'a'
  2. guess = int(temp)
复制代码
就会报错

如果帮到你了,就设成最佳吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 11:38:21 | 显示全部楼层
易夜宝福 发表于 2020-5-17 11:36
如果我想用isinstance做判断:
这样可以吗

不行,如果temp是str,会报错,可以看看我的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 11:39:09 | 显示全部楼层
易夜宝福 发表于 2020-5-17 11:36
如果我想用isinstance做判断:
这样可以吗

这样不推荐 因为你当你temp 输入的不是数值时候 就会报错  int 是把字符串类的数值转为整型,而你如果字符串输入的是字母就无法转换,就会报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-5-17 11:39:45 | 显示全部楼层
liuzhengyuan 发表于 2020-5-17 11:37
不可以,因为如果我输入的不是数字
使用 int() 时就会出错
所以python 专门搞了一个 isdigit()

嗯嗯,了解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 11:40:27 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-17 11:41:41 | 显示全部楼层
Twilight6 发表于 2020-5-17 11:39
这样不推荐 因为你当你temp 输入的不是数值时候 就会报错  int 是把字符串类的数值转为整型,而你如果字 ...

了解,谢谢哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-17 11:42:51 | 显示全部楼层
qiuyouzhi 发表于 2020-5-17 11:33
input默认返回的是字符串,可以用字符串方法:

了解,谢谢哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-17 11:43:44 | 显示全部楼层
焦健鬼 发表于 2020-5-17 11:35
来,给你

如果帮到你了,就设成最佳吧

了解,谢谢哈。不过有人先回答了。下次一定
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-17 11:44:22 | 显示全部楼层
Twilight6 发表于 2020-5-17 11:37
因为input是接受用户输入转为字符串类型返回,temp的类型就为str

所以这里永远返回的是False

谢谢哈。下次一定最佳
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 11:44:45 | 显示全部楼层
易夜宝福 发表于 2020-5-17 11:43
了解,谢谢哈。不过有人先回答了。下次一定

没事,你可以给我评个分
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-19 12:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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