易夜宝福 发表于 2020-5-17 11:25:33

python第一版005讲第0题求助

各位大佬求助{:10_266:} 为什么我用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
字符类型出错,请输入整数:

8178919 发表于 2020-5-17 11:26:16


焦健鬼 发表于 2020-5-17 11:26:35

发代码行的

易夜宝福 发表于 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("游戏结束,不玩啦^_^")

易夜宝福 发表于 2020-5-17 11:29:21

焦健鬼 发表于 2020-5-17 11:26
发代码行的

代码如下{:10_254:}
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("游戏结束,不玩啦^_^")

liuzhengyuan 发表于 2020-5-17 11:29:25

本帖最后由 liuzhengyuan 于 2020-5-17 11:36 编辑

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

求【最佳答案】~{:10_254:}

qiuyouzhi 发表于 2020-5-17 11:33:23

易夜宝福 发表于 2020-5-17 11:29
代码如下

input默认返回的是字符串,可以用字符串方法:
while not temp.isdigit():

焦健鬼 发表于 2020-5-17 11:35:19

易夜宝福 发表于 2020-5-17 11:29
代码如下

来,给你
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("游戏结束,不玩啦^_^")

如果帮到你了,就设成最佳吧{:10_287:}

易夜宝福 发表于 2020-5-17 11:36:33

liuzhengyuan 发表于 2020-5-17 11:29
input 输入的是字符串,当然不行
用 isdigit()

如果我想用isinstance做判断:guess = int(temp)
while not isinstance(guess,int):
这样可以吗

Twilight6 发表于 2020-5-17 11:37:42

因为input是接受用户输入转为字符串类型返回,temp的类型就为str
isinstance(temp,int)
所以这里永远返回的是False
又因为你在前面加了 not导致永远为True所以怎么样都可以继续循环了
你可以用字符串方法 isdigit()这个是直接判断字符串内的字符是否是为数值类型的,若是返回True,否则返回False
while not temp.isdigit():
改成这样即可

liuzhengyuan 发表于 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)就会报错

如果帮到你了,就设成最佳吧{:10_287:}

焦健鬼 发表于 2020-5-17 11:38:21

易夜宝福 发表于 2020-5-17 11:36
如果我想用isinstance做判断:
这样可以吗

不行,如果temp是str,会报错,可以看看我的

Twilight6 发表于 2020-5-17 11:39:09

易夜宝福 发表于 2020-5-17 11:36
如果我想用isinstance做判断:
这样可以吗

这样不推荐 因为你当你temp 输入的不是数值时候 就会报错int 是把字符串类的数值转为整型,而你如果字符串输入的是字母就无法转换,就会报错

易夜宝福 发表于 2020-5-17 11:39:45

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


嗯嗯,了解{:10_305:}

焦健鬼 发表于 2020-5-17 11:40:27

{:10_257:}

易夜宝福 发表于 2020-5-17 11:41:41

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

了解,谢谢哈{:10_287:}

易夜宝福 发表于 2020-5-17 11:42:51

qiuyouzhi 发表于 2020-5-17 11:33
input默认返回的是字符串,可以用字符串方法:

了解,谢谢哈{:10_276:}

易夜宝福 发表于 2020-5-17 11:43:44

焦健鬼 发表于 2020-5-17 11:35
来,给你

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

了解,谢谢哈。不过有人先回答了。下次一定{:10_278:}

易夜宝福 发表于 2020-5-17 11:44:22

Twilight6 发表于 2020-5-17 11:37
因为input是接受用户输入转为字符串类型返回,temp的类型就为str

所以这里永远返回的是False


谢谢哈。下次一定最佳{:10_278:}

焦健鬼 发表于 2020-5-17 11:44:45

易夜宝福 发表于 2020-5-17 11:43
了解,谢谢哈。不过有人先回答了。下次一定

没事,你可以给我评个分
页: [1] 2
查看完整版本: python第一版005讲第0题求助