鱼C论坛

 找回密码
 立即注册
查看: 525|回复: 6

[已解决]字符串可以比较吗?

[复制链接]
发表于 2023-12-19 00:11:29 | 显示全部楼层 |阅读模式

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

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

x
num1 = input("请输入第一个整数:")
num2 = input("请输入第二个整数:")

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

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

if num1 == num2:
    print("第一个数和第二个数一样大!")
#以上代码是作业里的一道题,问代码中有什么BUG,
答案是没有用int()函数返回数值
我用错的代码运行得到的结果并没有问题,而且测试'1'<'5'可以返回true,这题为什么不可以直接用字符串比较大小?
最佳答案
2023-12-19 11:11:21

input 函数接受用户的键盘输入,返回一个字符串,就算你输入的是数字,也还是字符串数字

int 函数可以将纯数字字符串转换为整型

你的代码中,不使用 int 函数转换 input 返回的数字字符串,会导致 if 比较大小时的结果不同

在字符串中,比较大小是通过 Unicode 值进行比较的,而且是从字符串顺序从左到右进行比较

只要有一个字符比较出了结果,那么后续的字符就不在进行比较,举个例子:

num1 = "1090"
num2 = "120"

这两个数字字符串进行比较,先比较第一个字符 Unicode(Python 内置函数 ord 可以得到字符的 Unicode)

ord("1") == ord("1") 第一个字符相同,接着比较下一个字符

ord("0") < ord("2") 第二个字符串 num2 的字符 大于 num1,则 num1 < num2 即 "1090" < "120"

后续的字符就不需要再进行比较了,所以我们还是需要将其 int 转换为整型进行比较

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-19 00:11:45 | 显示全部楼层
你好!关于字符串的比较,是可以进行比较的。在Python中,字符串是根据字符的ASCII值进行比较的。

对于你提供的代码,虽然没有使用`int()`函数将输入的字符串转换为整数,但在比较时,Python会自动将输入的字符串进行比较。在这种情况下,对于纯数字的字符串,比较结果是正确的。所以你在测试'1'和'2'时,得到的结果没有问题。

然而,这仅适用于输入的确实是数字字符串的情况。如果用户输入的不是数字字符串,而是其他类型的字符串,例如"abc",你将会得到一个`TypeError`错误,因为无法将这样的字符串转换为整数。

因此,为了保证程序的健壮性,最好在比较前使用`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("第一个数和第二个数一样大!")
复制代码

这样修改后,无论用户输入的是数字字符串还是其他类型的字符串,都能正确进行比较。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-19 00:15:22 | 显示全部楼层
FishC 发表于 2023-12-19 00:11
你好!关于字符串的比较,是可以进行比较的。在Python中,字符串是根据字符的ASCII值进行比较的。

对于你 ...

@FishC 我要比较数字,为什么会输入字母?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-19 00:15:42 | 显示全部楼层
水中有明月 发表于 2023-12-19 00:15
@FishC 我要比较数字,为什么会输入字母?

哈哈,这可能是因为你在输入时不小心按错了键。

不用担心,我们可以通过一些技巧来确保只输入数字。你可以使用`input()`函数来获取用户输入的值,并将其存储在一个变量中。

然后,我们可以使用`isdigit()`方法来检查用户输入的值是否是一个数字。如果是数字,我们就可以进行比较。如果不是数字,我们可以提示用户重新输入。

下面是一个示例代码:
  1. while True:
  2.     num1 = input("请输入第一个数字:")
  3.     if not num1.isdigit():
  4.         print("请输入有效的数字!")
  5.         continue
  6.     num2 = input("请输入第二个数字:")
  7.     if not num2.isdigit():
  8.         print("请输入有效的数字!")
  9.         continue
  10.     break
  11. num1 = int(num1)
  12. num2 = int(num2)
  13. if num1 > num2:
  14.     print("第一个数字大于第二个数字")
  15. elif num1 < num2:
  16.     print("第一个数字小于第二个数字")
  17. else:
  18.     print("两个数字相等")
复制代码

希望这可以帮到你!记住,检查用户输入的数据类型是一种良好的编程习惯。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-19 07:43:55 | 显示全部楼层
水中有明月 发表于 2023-12-19 00:15
@FishC 我要比较数字,为什么会输入字母?

input()本来输入的就是字符串,需要int转为数字

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

使用道具 举报

发表于 2023-12-19 10:56:58 | 显示全部楼层
您好,首先回答一下,字符串是可以进行比较的。
字符串的比较是通过ASCII码的值进行比较的。比较时从字符串的第一个值开始比较,谁的ASCII码值大就谁大,相等的话就开始第二个值做比较,以此类推,如果都相等则相等。详细的可以搜索ASCII对照表查看。
因为字符串可以进行比较,所以运行代码不会出错。但后面如果涉及到计算代码就存在BUG了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-12-19 11:11:21 | 显示全部楼层    本楼为最佳答案   

input 函数接受用户的键盘输入,返回一个字符串,就算你输入的是数字,也还是字符串数字

int 函数可以将纯数字字符串转换为整型

你的代码中,不使用 int 函数转换 input 返回的数字字符串,会导致 if 比较大小时的结果不同

在字符串中,比较大小是通过 Unicode 值进行比较的,而且是从字符串顺序从左到右进行比较

只要有一个字符比较出了结果,那么后续的字符就不在进行比较,举个例子:

num1 = "1090"
num2 = "120"

这两个数字字符串进行比较,先比较第一个字符 Unicode(Python 内置函数 ord 可以得到字符的 Unicode)

ord("1") == ord("1") 第一个字符相同,接着比较下一个字符

ord("0") < ord("2") 第二个字符串 num2 的字符 大于 num1,则 num1 < num2 即 "1090" < "120"

后续的字符就不需要再进行比较了,所以我们还是需要将其 int 转换为整型进行比较
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 19:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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