【发布时间】:2017-06-29 09:40:20
【问题描述】:
我的代码是用 python 3 编写的,用于打印回文。 它应该遍历所有 2 个 3 位数字的回文乘积,如下所示:
mylist=[]
for i in range(999,99,-1):
for x in range(999, i-1, -1,):
number=i*x
number=str(number)
if number==number[::-1]:
#print(number)
mylist.append(number)
mylist=mylist.sort(reverse=True)
print(mylist)
注意注释掉的打印。当这还在的时候,所有应该打印出来的回文都出来了。
当我运行我的代码时,如果没有 print 语句,控制台只会打印出“无”。
据我所知,我的逻辑是有序的,那么为什么会发生这种情况? 编辑: 此外,当我以相反的顺序对列表进行排序时,99999 排在第一位。我认为这是因为 python 查看连续的 9 并认为它是最大的。 但是,有没有一种简单的方法可以获得实际最大的数字?
【问题讨论】:
-
您将
mylist绑定到调用.sort的结果,这是一个返回None的就地操作。只需mylist.sort(reverse=True)。 -
@Shawn Li 不确定您在编辑中的意思,但数字默认按数字递增顺序排序,但您添加了
reverse=True,这会将最大的数字放在第一位 - 因为好吧,它是实际最大的数字。 -
@JulienD 它们不是按数字顺序排序的,因为 99999 排在第一位,但是诸如 101101 之类的数字大于 99999。所以我的意思是,您能否将数字上最大的数字设为最接近无穷大的数字,先来?
-
@Shawn Li 我明白了。您正在对字符串进行排序 (
number=str(number))。为什么不对数字进行排序,它们将它们映射到字符串?否则,您将不得不将密钥功能指定为sort:wiki.python.org/moin/HowTo/Sorting#Key_Functions -
@JulienD 非常感谢!完成!
标签: python python-3.x reverse palindrome