鱼C论坛

 找回密码
 立即注册
查看: 3326|回复: 4

到底如何判断被赋值到标签中的数据类型?

[复制链接]
发表于 2015-11-29 21:52:26 | 显示全部楼层 |阅读模式

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

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

x
先看看这段代码:
  1. import sys , random                #调用sys系统模块,random随机模块
  2. guess = random.randint (0,100)                #系统产生0-100的随机数并赋值给guess
  3. count = 5                #计数器,一共有五次机会(改变count中的数值可以改变循环次数)
  4. print('Welcome! You have ',count, 'chance to play this game !')
  5. temp = input('Please typing a number of int here: ')                #将用户输入的数值赋值给temp
  6. if isinstance(temp, list)
  7. number = int(temp)                #强制转换temp中的数值类型为int(整型)并赋值给number
  8. if number > guess:                #判断开始:如果number中的数值大于系统产生的随机数guess,则执行下面语句
  9.         print('Your number is big !')                #打印内容
  10.         count = count - 1                #计数器count中的数值减 1
  11.         print('You have ',count, 'chance !')                #打印计数器count中数值的内容
  12. else:                #否则:如果number中的数值不大于guess,则执行下面的语句
  13.         print('Your number is small !')                #打印内容
  14.         count = count - 1                #计数器count数值减 1
  15.         print('You have ',count, 'chance !')                #打印内容,判断结束
  16. while count > 0:                #循环开始:如果计数器count中的数值大于0,则执行下面代码:
  17.         temp = input('Please typing a number of int here: ')                #让用户重新输入内容,并赋值给temp
  18.         number = int(temp)                #强制转换temp中的数值类型为int(整型)并赋值给number
  19.         if number == guess:                #判断开始:如果number中的数值等于系统产生的随机数guess,则执行下面语句
  20.                 print('Great!!! You did it ! \nThe right number is :' ,guess, '!')                #打印内容
  21.                 print('Game Over !')                #打印内容
  22.                 sys.exit()                #调用系统函数模块sys中的退出子命令.exit(),退出程序
  23.         else:                #否则:如果number中的数值不等于系统产生的随机数guess,则执行下面语句
  24.                 if number > guess:                #判断开始:如果number中的数值大于系统产生的随机数guess,则执行下面语句
  25.                         print('Your number is big !')                #打印内容
  26.                         count = count - 1                #计数器count中的数值减 1
  27.                         print('You have ',count, 'chance !')                #打印内容
  28.                 else:                #否则:如果number中的数值小于系统产生的随机数guess,则执行下面语句
  29.                         print('Your number is small !')                #打印内容
  30.                         count = count - 1                #计数器count中的数值减 1
  31.                         print('You have ',count, 'chance !')                #打印内容,判断结束
  32. print('Game Over ! ')        #打印内容,循环结束
  33. sys.exit()                #调用系统函数模块sys中的退出子命令.exit(),退出程序
复制代码


这段代码我想大家已经做了很多次了,我就不啰嗦了,我想先描述下我的问题:
当我在第一次让用户输入的时候输入的不是数字,而是非数字,会报错,程序终止。
于是,我用type判断数据类型:如果输入的类型不等于int类型,那么,重新输入。
现在问题来了,不管我输入什么,type出来的类型都是str(包括1:0)。。。。。,然后用isinstance进行判断。。结果和type一样。。
那么,我想问:
1:为何1:0也被python识别为str类型?
2:用什么方法才能正确判断出数据真正的、正确的类型?
3:我尝试用将输入的数据类型强制转换为ascii,number = ascii(temp),但type出来后的类型依然是str(不管输入什么都是)为什么?
4:听说异常可以处理这类事件,但是异常可以被循环吗?如果可以,在这段代码里面如何操作?
5:如果异常可以正常运行,那么,如果在除第一次意外的任何输入时,如果在此处理输入非int类型的事件?
6:这问题困扰我很久了,暂时还没想到。。。。。。。

各位,麻烦你们帮我看看,谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-11-29 23:43:04 | 显示全部楼层
如果是我可能这样编写(稍微简化了):
  1. import random                #random随机模块
  2. guess = random.randint (0,100)                #系统产生0-100的随机数并赋值给guess
  3. count = 5                #计数器,一共有五次机会(改变count中的数值可以改变循环次数)
  4. while count>0:
  5.     print('Welcome! You have ',count, 'chance to play this game !')
  6.     while True:
  7.         try:
  8.             temp = input('Please typing a number of int here: ')                #将用户输入的数值赋值给temp
  9.             number = int(temp)                #强制转换temp中的数值类型为int(整型)并赋值给number
  10.             break #如果输入的是整数退出这个小循环
  11.         except:
  12.             print('Not a integer')
  13.     if number > guess:                #判断开始:如果number中的数值大于系统产生的随机数guess,则执行下面语句
  14.         print('Your number is big !')                #打印内容
  15.     elif number < guess:#否则:如果number中的数值小于于guess,则执行下面的语句
  16.         print('Your number is small !')                #打印内容
  17.     else:
  18.          print('Great!!! You did it ! \nThe right number is :' ,guess, '!')                #打印内容
  19.          break
  20.     count-=1
  21. else:
  22.     print('Game Over ! ')        #打印内容,循环结束
复制代码


1:为何1:0也被python识别为str类型?
因为input函数的返回值就是str。
2:用什么方法才能正确判断出数据真正的、正确的类型?
可以用字符串的isdigit,isalph等判断,不如用异常处理方便。
3:我尝试用将输入的数据类型强制转换为ascii,number = ascii(temp),但type出来后的类型依然是str(不管输入什么都是)为什么?
ascii()函数是返回一个可打印的对象字符串方式表示。当遇到非ASCII码时,就会输出\x,\u或\U等字符来。因此它的值还是str。
4:听说异常可以处理这类事件,但是异常可以被循环吗?如果可以,在这段代码里面如何操作?
参见我的程序。
5:如果异常可以正常运行,那么,如果在除第一次意外的任何输入时,如果在此处理输入非int类型的事件?
参见我的程序。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-30 00:36:01 | 显示全部楼层
本帖最后由 seedcm 于 2015-11-30 00:40 编辑
冬雪雪冬 发表于 2015-11-29 23:43
如果是我可能这样编写(稍微简化了):


谢谢。非常感谢!
我这样写比较完美!哈哈。。
太感谢了!

  1. import sys , random        #导入系统模块sys,随机模块random
  2. guess = random.randint (1,101)                #让系统产生1-100的随机数并赋值给guess
  3. count = 5                #计数器初始值为5
  4. print('Welcome! You have ',count, 'chance to play this game !')                #打印计数器count数值
  5. while count > 0:                #循环开始:如果计数器count中的数值大于0,则执行下列代码
  6.     number = input('Please typing a number of int here: ')                #让用户输入数据并赋值给number
  7.     def number_type(number):                #定义模块:为异常处理定义模块名:number_type 并带入number数值
  8.         try:                #异常处理开始:下列为正常模块
  9.             int(number)                #强制转换number中的数据为int(整型)
  10.             return True                #返回值 True
  11.         except ValueError:                #异常处理分支:如果出现ValueError错误类型,则进行下列代码
  12.             return False                #返回值 False
  13.     if number_type(number) == False:                #判断开始:如果自定义的异常处理模块带入number中的数据测试的结果等于 False,则运行下列代码
  14.         print('Sorry ! Your number is wrong !')                #打印
  15.         count = count - 1                #计数器count中的数据减一
  16.         print('You have ',count, 'chance !')                #打印并显示计数器count中的数据值
  17.     else:                #判断分支:如果自定义的异常处理模块带入number中的数据测试的结果等于 True,则运行下列代码
  18.         if int(number) > guess:                #判断开始:如果number数据中的值被强制转换成int(整型)后的值大于guess(系统产生的随机数)则运行下列代码
  19.             print('Your number is big !')                #打印
  20.             count = count - 1                #计数器count中的数据减一
  21.             print('You have ',count, 'chance !')                #打印并显示计数器count中的数据值
  22.         else:                #判断分支:如果number数据中的值被强制转换成int(整型)后的值小于guess(系统产生的随机数)则运行下列代码
  23.             print('Your number is small !')                #打印
  24.             count = count - 1                #计数器count中的数据减一
  25.             print('You have ',count, 'chance !')                #打印并显示计数器count中的数据值
  26. print('Game Over ! ')                #循环结束。打印
  27. sys.exit()                #调用导入的系统模块sys中的子命令.exit() 退出程序
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-8 17:33:44 | 显示全部楼层
复杂难懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-8 20:29:17 | 显示全部楼层
确实看起来比较乱。。主要是注释太乱:sad
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-18 13:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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