鱼C论坛

 找回密码
 立即注册
查看: 847|回复: 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()

比如
temp = 'a'
guess = int(temp)
就会报错

如果帮到你了,就设成最佳吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

使用道具 举报

发表于 2020-5-17 11:26:35 | 显示全部楼层
发代码行的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-17 11:28:33 | 显示全部楼层
代码行如下:
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("游戏结束,不玩啦^_^")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

代码如下
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("游戏结束,不玩啦^_^")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

input 输入的是字符串,当然不行
用 isdigit()
temp = input()
while not temp.isdigit():
      ...

求【最佳答案】~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

input默认返回的是字符串,可以用字符串方法:
while not temp.isdigit():
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


来,给你
import random
times = 3
secret = random.randint(1,10)
print('------------------我爱鱼C工作室------------------')
guess = 0
print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")
while (guess != secret) and (times > 0):
    temp = input()
    try:
        int(temp)
    except:
        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("游戏结束,不玩啦^_^")
如果帮到你了,就设成最佳吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

如果我想用isinstance做判断:
guess = int(temp)
while not isinstance(guess,int):
这样可以吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 11:37:42 | 显示全部楼层
因为input是接受用户输入转为字符串类型返回,temp的类型就为str
isinstance(temp,int)
所以这里永远返回的是False
又因为你在前面加了 not  导致永远为True  所以怎么样都可以继续循环了
你可以用字符串方法 isdigit()  这个是直接判断字符串内的字符是否是为数值类型的,若是返回True,否则返回False
while not temp.isdigit():
改成这样即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

比如
temp = 'a'
guess = int(temp)
就会报错

如果帮到你了,就设成最佳吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不行,如果temp是str,会报错,可以看看我的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这样不推荐 因为你当你temp 输入的不是数值时候 就会报错  int 是把字符串类的数值转为整型,而你如果字符串输入的是字母就无法转换,就会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

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

使用道具 举报

发表于 2020-5-17 11:40:27 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

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

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

了解,谢谢哈。不过有人先回答了。下次一定
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

所以这里永远返回的是False

谢谢哈。下次一定最佳
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

没事,你可以给我评个分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 03:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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