鱼C论坛

 找回密码
 立即注册
查看: 3459|回复: 9

[已解决]Python 的input 能否控制数据输入类型

[复制链接]
发表于 2019-7-27 10:44:05 | 显示全部楼层 |阅读模式

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

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

x
各位鱼油
      我刚开始学习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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-27 10:47:08 | 显示全部楼层    本楼为最佳答案   
这种方法是不可取的,if isinstance(temp,int) != True:判断时,temp永远为str,对于初学者可以用temp.isdigit()做简单的判定,最好的方法是用异常处理try
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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


修改源码如下:
if  not temp.isdigit() == True:     #判断数据类型
            print('您输入的数据:'+ temp +'不合法,请重新输入我心目中的数字(0-10)之间')
    else:
        guess = int(temp)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-27 18:46:23 | 显示全部楼层
给你提一点建议:
你的while循环的第一个条件是guess!=secret,但你的guess的初始值为0,而且secret在0-10之间,也就是guess一开始就可能==secret,返回False,那么while循环将不会被执行,直接print('游戏结束!')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-27 19:01:30 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2019-7-27 19:14 编辑
LuckFly 发表于 2019-7-27 18:59
的确有些纰漏,感谢提醒。
不过我可以选择把guess的初始值放到0-10之外,比如11或者把随机范围缩小成1-1 ...


你为什么不去掉那一行呢?
不设置初始值也是一样的
只不过你需要稍微修改一下你的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

发表于 2019-7-27 19:23:04 | 显示全部楼层

比如这样:
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呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-11-12 14:13:39 | 显示全部楼层
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-18 16:02:28 | 显示全部楼层
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 06:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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