python学习笔记(2)——练习小程序之 " input " 隐藏陷阱

时间:2022-03-08 09:18:07

练习小程序之 ----------" input " 隐藏陷阱

1 age=input('please enter your age:')
2 if age>=18:  
3   print('adult') 
4 else:
5     print('teeager')

报错如下 ↓↓↓↓↓↓

python学习笔记(2)——练习小程序之 " input " 隐藏陷阱

 最后提示 —— 类型错误:非规则 类型:字符串>=整型,也就是说 由于程序将“字符串”与“整型数字”去做 比较运算了,这二者非同一类不能计算,所以报错。

可我刚才明明给age输入的20啊,20>=18有错吗?难道20,18不是同一类?

于是用print(type(age))命令查验age被赋值后的类型,果然

 python学习笔记(2)——练习小程序之 " input " 隐藏陷阱

此时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)
'@'