菜de嚣张 发表于 2022-11-12 17:03:07

为啥这个12321返回不是回文数啊?有大佬帮忙看看不

本帖最后由 菜de嚣张 于 2022-11-12 17:10 编辑

x = int(input("请输入一个正整数:"))

if x < 0 or x != 0 and (x % 10 == 0):
    print("不是回文数。")
else:
    revertedNumber = 0
    while x > 0:
      revertedNumber = revertedNumber * 10 + x % 10
      x //= 10

    if x == revertedNumber:
      print("是回文数。")
    else:
      print("不是回文数。")

jackz007 发表于 2022-11-12 17:12:06

if x < 0 or x != 0 and (x % 10 == 0):
            and 的优先级高于 or
if x < 0 or (x != 0 and (x % 10 == 0)) :
x = 12321 , x != 0 为 True,x % 10 == 0 为 False,所以,x != 0 and (x % 10 == 0) 为 False
x < 0 为 False,x != 0 and (x % 10 == 0) 为 False,if x < 0 or x != 0 and (x % 10 == 0) 为 False

菜de嚣张 发表于 2022-11-12 17:20:25

对啊,就是False,所以不执行“print(‘不是回文数。’)”,不是吗

菜de嚣张 发表于 2022-11-12 17:23:50

jackz007 发表于 2022-11-12 17:12
and 的优先级高于 or


对啊,就是False,所以不执行“print(‘不是回文数。’)”,不是吗

jackz007 发表于 2022-11-12 17:28:06

菜de嚣张 发表于 2022-11-12 17:23
对啊,就是False,所以不执行“print(‘不是回文数。’)”,不是吗

    while x > 0:               # x 不等于 0 不罢休
      revertedNumber = revertedNumber * 10 + x % 10
      x //= 10

    if x == revertedNumber:      # x 是 0 值,怎么可能与revertedNumber 相等

tommyyu 发表于 2022-11-12 17:34:16

x 在循环过程中被变成 0 了

菜de嚣张 发表于 2022-11-12 17:34:48

tommyyu 发表于 2022-11-12 17:34
x 在循环过程中被变成 0 了

明白了谢谢大佬

菜de嚣张 发表于 2022-11-12 17:35:18

jackz007 发表于 2022-11-12 17:28


明白了谢谢大佬

gywjj 发表于 2022-11-12 22:06:17

这个我觉得把数字转成文本,再取反,然后再比较,应该更快吧。
比如 a = str(x)
b = a[::-1]
if a == b:
   print(....)
这样子。

菜de嚣张 发表于 2022-11-13 15:55:17

gywjj 发表于 2022-11-12 22:06
这个我觉得把数字转成文本,再取反,然后再比较,应该更快吧。
比如 a = str(x)
b = a[::-1]


对,是更简单的方法哈哈哈
页: [1]
查看完整版本: 为啥这个12321返回不是回文数啊?有大佬帮忙看看不