练习小程序之 ----------" input " 隐藏陷阱
1 age=input('please enter your age:') 2 if age>=18: 3 print('adult') 4 else: 5 print('teeager')
报错如下 ↓↓↓↓↓↓
最后提示 —— 类型错误:非规则 类型:字符串>=整型,也就是说 由于程序将“字符串”与“整型数字”去做 比较运算了,这二者非同一类不能计算,所以报错。
可我刚才明明给age输入的20啊,20>=18有错吗?难道20,18不是同一类?
于是用print(type(age))命令查验age被赋值后的类型,果然
此时age的class类是str !! 看来江湖传言是真的,凡是被input过的数据全部被转换成str字符串! 也就是说,其实此时age内存放的是 '20' 而不是20。
那么,要正确实现结果,需要
1 age=input('please enter your age:') 2 age=int(age) //加入强制转换age为int类型的语句 3 if age>=18: 4 print('adult') 5 else: 6 print('teeager')
结果运行成功,就不贴图了;虽然是个小知识点,但发现问题,解决问题的感觉是最棒的。
----------------------
我KAO,刚发现还有这种操作
1 age=input('please enter your age:') 2 if age>='18': 3 print('adult') 4 else: 5 print('teeager')
不用int转换age类型,直接把18写成 '18' ,结果一样可以实现。
为什么呢?理由有点深... '18'是str,age中输入的数值(假设是 20)也会被input处理成 '20' ,两个str可以比较大小吗?答案是肯定的,str之间用 Unicode 编码进行大小比较。
'20'>'18'是肯定的, 'a'>'18' 可以实现吗?答案是 True,因为 'a' 在 Unicode 中的排名是97。在 'a'>'18' 比较中,String 通过 内置函数 ord() 获得每个字符的 Unicode 编码进行大小比较,此处python命令是:
ord()
例:
>>> ord('a') 97
其实,str比较的是 “顺序值”,各字符串在 Unicode 编码中所处的顺序值,后序>前序。
遇到什么写什么,有点乱。。。但真感觉学无止境,一个小点可以扩展出如此大范围,OMG
PS:关于ord/chr命令的几点扩展
1、ord()函数主要用来返回对应字符的ascii码(整数码,我更喜欢称其为序列码)
1 >>> ord('!') 2 33 3 >>> ord('$') 4 36 5 >>> ord('A') 6 65 7 >>> ord('a') 8 97 9 >>> ord('0') #此处'0'为ASCII中打印出的0字符,不是整数值 10 48 11 >>> ord('1') 12 49 13 >>> ord('9') 14 57
2、与之相反,chr()主要用来表示ascii码中序列值对应的字符码,可以用十进制,也可以用十六进制。
1 >>> chr(65) 2 'A' 3 >>> chr(97) 4 'a'
>>> chr(0x41) 'A' >>> chr(0x40) '@'