LuckFly 发表于 2019-7-27 10:44:05

Python 的input 能否控制数据输入类型

各位鱼油
      我刚开始学习Python,遇到个问题,因为Python3中的input输入后的数据类型均为str类型,请问鱼油,是否可以针对Python的input数据类型做判断和动作。


源码如下:

import random    #定义随机函数
times = 3      #定义尝试次数
secret = random.randint(0,10)#生成0-10的随机数
guess = 0
print ('--------------我爱鱼C工作室-----------------')
print('猜一猜我心目中的数字(0-10之间):', end='')
print('你有%d机会:'%(times))

while (guess != secret) and (times > 0):   #循环判断如果随机数和输入数值不相同,且次数还在范围内
    times = times - 1   #次数递减
    temp = input()#输入数值
    if isinstance(temp,int) != True:   #判断数据类型
            print('您输入的数据:'+ temp +'不合法,请重新输入我心目中的数字(0-10)之间')
    else:
      guess = int(temp)
      if guess == secret:
            print('猜对了!')
            print('猜对了也不给奖励!你咬我呀!')
      else:
            if guess > secret:
                print('哥,大了大了!还有%d机会' % (times))
            else:
                print('嘿,小了小了!还有%d机会' % (times))
            if times > 0:
                print('在尝试一次吧', end='')
            else:
                print('没机会了')
                print('我心目中的数字是%d' % (secret))
print('游戏结束!')

冬雪雪冬 发表于 2019-7-27 10:47:08

这种方法是不可取的,if isinstance(temp,int) != True:判断时,temp永远为str,对于初学者可以用temp.isdigit()做简单的判定,最好的方法是用异常处理try

LuckFly 发表于 2019-7-27 11:10:08

冬雪雪冬 发表于 2019-7-27 10:47
这种方法是不可取的,if isinstance(temp,int) != True:判断时,temp永远为str,对于初学者可以用temp.isdi ...

感谢版主的答复,问题已经解决,留下源码以便遇到同样问题的鱼油。


修改源码如下:
ifnot temp.isdigit() == True:   #判断数据类型
            print('您输入的数据:'+ temp +'不合法,请重新输入我心目中的数字(0-10)之间')
    else:
      guess = int(temp)

永恒的蓝色梦想 发表于 2019-7-27 18:46:23

给你提一点建议:
你的while循环的第一个条件是guess!=secret,但你的guess的初始值为0,而且secret在0-10之间,也就是guess一开始就可能==secret,返回False,那么while循环将不会被执行,直接print('游戏结束!')

LuckFly 发表于 2019-7-27 18:59:21

永恒的蓝色梦想 发表于 2019-7-27 18:46
给你提一点建议:
你的while循环的第一个条件是guess!=secret,但你的guess的初始值为0,而且secret在0-10 ...

的确有些纰漏,感谢提醒。
不过我可以选择把guess的初始值放到0-10之外,比如11或者把随机范围缩小成1-10。

永恒的蓝色梦想 发表于 2019-7-27 19:01:30

本帖最后由 永恒的蓝色梦想 于 2019-7-27 19:14 编辑

LuckFly 发表于 2019-7-27 18:59
的确有些纰漏,感谢提醒。
不过我可以选择把guess的初始值放到0-10之外,比如11或者把随机范围缩小成1-1 ...

你为什么不去掉那一行呢?
不设置初始值也是一样的
只不过你需要稍微修改一下你的代码

LuckFly 发表于 2019-7-27 19:15:11

永恒的蓝色梦想 发表于 2019-7-27 19:01
你为什么不去掉那一行呢?
不设置初始值也是一样的
只不过你需要稍微修改一下你的代码

比如呢?

永恒的蓝色梦想 发表于 2019-7-27 19:23:04

LuckFly 发表于 2019-7-27 19:15
比如呢?

比如这样:import random    #定义随机函数
times = 3      #定义尝试次数
secret = random.randint(0,10)#生成0-10的随机数
guess = 0
print ('--------------我爱鱼C工作室-----------------')
print('猜一猜我心目中的数字(0-10之间):', end='')
print('你有%d机会:'%(times))

while times > 0:   #循环判断如果随机数和输入数值不相同,且次数还在范围内
    times = times - 1   #次数递减
    temp = input()#输入数值
    if isinstance(temp,int) != True:   #判断数据类型
            print('您输入的数据:'+ temp +'不合法,请重新输入我心目中的数字(0-10)之间')
    else:
      guess = int(temp)
      if guess == secret:
            print('猜对了!')
            print('猜对了也不给奖励!你咬我呀!')
            break
      else:
            if guess > secret:
                print('哥,大了大了!还有%d机会' % (times))
            else:
                print('嘿,小了小了!还有%d机会' % (times))
            if times > 0:
                print('在尝试一次吧', end='')
            else:
                print('没机会了')
                print('我心目中的数字是%d' % (secret))
print('游戏结束!')而且,你为什么不用elif呢?

sdqfqyj 发表于 2020-11-12 14:13:39

{:10_266:}学习了

linchal 发表于 2022-2-18 16:02:28

学习了{:9_241:}
页: [1]
查看完整版本: Python 的input 能否控制数据输入类型