字符串比较大小疑问
本帖最后由 萧人也 于 2020-7-29 16:30 编辑H E L P {:5_105:} {:5_105:} {:5_105:}
题目:
以下是本人写的代码:
ageTable='''
诸葛亮, 28
刘备, 48
刘琦, 25
赵云, 32
张飞, 43
关羽, 45
'''
ageTable1=
rather30,less30=[],[]
for i in ageTable1:
j=i.split(',')
if j>='30':
rather30.append(j)
else:
less30.append(j)
print('大于等于30岁的人有:')
for x in rather30:
print(x)
print('小于30岁的人有:')
for y in less30:
print(y)
疑问:该代码打印出来的结果是没有大于等于30岁的人,只有小于30岁的人(不信可以拷贝代码试试)。究其原因是if j>'30'出了问题。将该处代码改成if int(j)>30后可以打印出大于等于30岁的人。
但本人有个疑问,字符串不是也能比较大小吗?为什么一开始j>'30'返回的都是FALSE结果,像'48'>'30'在python里返回的是True类型,为什么这边就成了FALSE。
求各位大神能支支招!!! 本帖最后由 Twilight6 于 2020-7-29 16:48 编辑
字符串比较大小的时候比较的是 ASCII 码值的大小,而且是依次比较
只要比较出一个 ASCII 码值的大小的区别就不在进行比较了
你的代码可以稍微改动下如下
正确代码:
ageTable='''
诸葛亮, 28
刘备, 48
刘琦, 25
赵云, 32
张飞, 43
关羽, 45
'''
ageTable1=
ageTable1 = [,int(i.split(',').strip())] for i in ageTable1]
rather30,less30=[],[]
for i in ageTable1:
if i>=30:
rather30.append(i)
else:
less30.append(i)
print('大于等于30岁的人有:')
for x in rather30:
print(x)
print('小于30岁的人有:')
for y in less30:
print(y)
本帖最后由 Twilight6 于 2020-7-29 16:39 编辑
比如 '110' 和 '21' 比较
首先比较 '110' 字符串的 '1' 字符,和 '21' 字符串的 '2' 字符
通过查表或者Pythonord 函数得出:
>>> ord('1')
49
>>> ord('2')
50
'2' 字符的 ASCII 码值大于 '1' 字符串,所以字符串'110' 小于字符串 '21'
在比如 '112' 和 '12' 进行比较
因为第一个字符都是 '1' 所以第一次比较 '1' 字符 ASCII 码值相同
所以比较下一个字符,即比较第二个,'112' 的第二个字符为 '1' ,而 '12' 的第二个字符为 '2'
而同上理由可得 ,'1' 的 ASCII 小于 '2' 所以字符串 '12'> '123'
本帖最后由 陈尚涵 于 2020-7-29 16:56 编辑
这个帖子写错了 本帖最后由 陈尚涵 于 2020-7-29 16:55 编辑
这个帖子写错了 本帖最后由 陈尚涵 于 2020-7-29 16:55 编辑
这个帖子写错了 本帖最后由 陈尚涵 于 2020-7-29 16:55 编辑
1.你这个rather30,less30 = []用的是同一个id啊,这么写:
rather30 = []
less30 = []
2.你这个逗号后面有个空格啊,应该这么split:
j = i.split(', ')
3.字符串哪有比大小的操作啊,得转换数据类型,这么判断:
if int(j)>=30:
rather30.append(j)
else:
less30.append(j)
改完的代码是这样的:
ageTable='''
诸葛亮, 28
刘备, 48
刘琦, 25
赵云, 32
张飞, 43
关羽, 45
'''
ageTable1=
rather30 = []
less30 = []
for i in ageTable1:
j = i.split(', ')
if int(j)>=30:
rather30.append(j)
else:
less30.append(j)
print('大于等于30岁的人有:')
for x in rather30:
print(x)
print('小于30岁的人有:')
for y in less30:
print(y)
然后代码就完成了
我需要你的最佳答案!!!
本帖最后由 均昊山 于 2020-7-29 16:55 编辑
ageTable={'诸葛亮':'28','刘备':'48','刘琦':'25','赵云':'32','张飞':'43','关羽':'45'}
for eac in ageTable.keys():
if int(ageTable) > 30:
print(eac,ageTable,' ',end='')
print('')
for eac in ageTable.keys():
if int(ageTable) < 30:
print(eac,ageTable,' ',end='')
参考一下 均昊山 发表于 2020-7-29 16:53
ageTable={'诸葛亮':'28','刘备':'48','刘琦':'25','赵云':'32','张飞':'43','关羽':'45'}
for eac in a ...
额,人家只是让你给代码做个修改,你这把代码整体思路怎么都改了{:10_277:} 陈尚涵 发表于 2020-7-29 16:57
额,人家只是让你给代码做个修改,你这把代码整体思路怎么都改了
不然呢,不学学用列表字典数组运用,写那么多,自己定位也不好。换上我这个也好定位,字符串比大少,转成str>str 跟数字排大小一样了~ 均昊山 发表于 2020-7-29 17:00
不然呢,不学学用列表字典数组运用,写那么多,自己定位也不好。换上我这个也好定位,字符串比大少,转成 ...
你看看我的那个帖子,其实也就有点错误,改过来程序还是能正常运行的啊 均昊山 发表于 2020-7-29 17:00
不然呢,不学学用列表字典数组运用,写那么多,自己定位也不好。换上我这个也好定位,字符串比大少,转成 ...
不信你复制我的代码试试 楼主,ASCII码可以是可以,就是太麻烦了,直接用数据类型转换他不香吗? Twilight6 发表于 2020-7-29 16:37
比如 '110' 和 '21' 比较
首先比较 '110' 字符串的 '1' 字符,和 '21' 字符串的 '2' 字符
感谢,找到原因了。是我没注意到数字前面还有个空格的原因,导致跟字符串‘30’比较都是FALSE了{:5_104:} 萧人也 发表于 2020-7-29 17:18
感谢,找到原因了。是我没注意到数字前面还有个空格的原因,导致跟字符串‘30’比较都是FALSE了
但是你还要数据转换啊,你看我的贴了吗{:10_257:} 陈尚涵 发表于 2020-7-29 16:51
1.你这个rather30,less30 = []用的是同一个id啊,这么写:
感谢,是我没注意到数字前面还有个空格的原因,导致跟字符串‘30’比较都是FALSE了{:5_104:} 萧人也 发表于 2020-7-29 17:18
感谢,找到原因了。是我没注意到数字前面还有个空格的原因,导致跟字符串‘30’比较都是FALSE了
不数据转换看着难看 均昊山 发表于 2020-7-29 16:53
ageTable={'诸葛亮':'28','刘备':'48','刘琦':'25','赵云':'32','张飞':'43','关羽':'45'}
for eac in a ...
哈哈,你这样也没毛病{:10_277:} 陈尚涵 发表于 2020-7-29 17:21
不数据转换看着难看
但至少不转换跑起来这边结果也没错,嗯,最好是数据转换一下 萧人也 发表于 2020-7-29 17:31
但至少不转换跑起来这边结果也没错,嗯,最好是数据转换一下
那就给我设置个最佳答案呗{:10_254:}
页:
[1]