鱼C论坛

 找回密码
 立即注册
查看: 1461|回复: 10

[已解决]字符串为什么不能比较大小?

[复制链接]
发表于 2020-3-22 11:50:13 | 显示全部楼层 |阅读模式

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

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

x
先来看看原来的代码
  1. num1 = input("请输入一个整数")
  2. num2 = input("请输入第二个整数")

  3. if num1 < num2:
  4.     print("第一个数比第二个数小!")

  5. if num1 > num2:
  6.     print("第一个数比第二个数大!")

  7. if num1 == num2:
  8.     print("两个数一样大!")
复制代码
“这其中有一个致命BUG”指的是input接受用户数据之后没有用int()改成整数,可我跑了几次,发现这个源代码没有什么问题,可以比较整数小数甚至中文简体数字,那么这究竟是为什么呢?真的有必要加上int()吗?

这是官方答案:
  1. num1 = int(input("请输入第一个整数:"))
  2. num2 = int(input("请输入第二个整数:"))

  3. if num1 < num2:
  4.     print("第一个数比第二个数小!")

  5. if num1 > num2:
  6.     print("第一个数比第二个数大!")

  7. if num1 == num2:
  8.     print("第一个数和第二个数一样大!")
复制代码
最佳答案
2020-3-22 13:38:14
字符串比较的是 不是asc-2码 而是UNICODE码 你可以ord函数来查询每一个字符的Unicode码
比如 '123' 在 内存中 存储的是 三个数字的Unicode码 49 50 51
'89'存储的是 56 57 对于序列是根据逐项比大小的 第一项 49 < 56
所以'123'<'89'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-22 12:03:16 | 显示全部楼层
第一个程序比较的是字符串的大小,字符串大小是以ASCII比较的,'25'>'21'     '123'<'52'
第二个程序才是比较数字的大小,int()是把一个字符串编程int类型,若你输入的内容还有除了数字以外的字符,就会报错(第一个字符可以是+或者-)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-22 12:10:31 | 显示全部楼层
        谁说不能直接比较字符串?
  1. >>> a = 'ABC'
  2. >>> b = 'ABD'
  3. >>> a > b
  4. False
  5. >>> a < b
  6. True
  7. >>> a = '123'
  8. >>> b = '234'
  9. >>> a > b
  10. False
  11. >>> b > a
  12. True
  13. >>>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-22 12:14:57 | 显示全部楼层
就很懵,字符串的比较和数字的比较难道不一样吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-22 12:15:50 | 显示全部楼层
而且字符串还可以输入中文简体数字,还多支持一种语言耶?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-22 12:18:28 | 显示全部楼层
xiaomei47580 发表于 2020-3-22 12:15
而且字符串还可以输入中文简体数字,还多支持一种语言耶?

是的,多支持一种语言,而且'123'还小于'78'呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-22 13:18:56 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-3-22 12:18
是的,多支持一种语言,而且'123'还小于'78'呢

???为什么啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-22 13:35:10 | 显示全部楼层

因为字符串不是数字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-22 13:38:14 | 显示全部楼层    本楼为最佳答案   
字符串比较的是 不是asc-2码 而是UNICODE码 你可以ord函数来查询每一个字符的Unicode码
比如 '123' 在 内存中 存储的是 三个数字的Unicode码 49 50 51
'89'存储的是 56 57 对于序列是根据逐项比大小的 第一项 49 < 56
所以'123'<'89'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-22 20:38:17 | 显示全部楼层
哇塞?!就是给每个数字增加一个属性然后进行对比是吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-22 20:47:54 | 显示全部楼层
字符串有拼接和重复操作符,没有比较大小的功能
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 15:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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