你的代码太烂七八糟,懒得看,我自己写了一个,你看看
def convert(num: int, notation: int) -> list:
l = []
while num >= notation:
mod = num % notation
l.insert(0, mod)
num = num // notation
l.insert(0, num)
l.reverse()
return l
def reverse_equal(l1:list, l2:list) -> bool:
l1.reverse()
l1_count = len(l1)
for i in range(l1_count):
if l1[i] != l2[i]:
return False
return True
def fuck() -> list:
l = []
for i in range(101, 325):
l7 = convert(i, 7)
l9 = convert(i, 9)
if reverse_equal(l7, l9):
l.append(i)
return l
if __name__ == "__main__":
l = fuck()
print(l)
为什么我限定在101到325之间,因为我提前算了,这个数只可能在这个范围里。其实这种问题,你设个断点调试就行了,不用问人的,如果输出太多,可以把日志写了文件里,然后打开文件看就好了。 另外,这个编辑器可以格式化代码的。
我略看了下,我觉得你的思路是对的,但是有两点可以改进,如果改进了,你就能很容易找到错误:
一个方法里不要有太多的逻辑(一个方法应该只干一件事情),你的main方法里逻辑太多了,建议拆分出一个函数专门判断一个数的7进制和9进制是否符合要求
你遍历了所有3位的7进制数,其实可以预先算出一个范围来,这样效率会高些。
当你拆分出好几个小方法后,只要分别验证是哪个小方法有问题就好了,而验证小方法是否正确是非常简单的。这是单元测试的基础:1,职责单一;2,耦合性尽量低。
其实,代码是给人看的,不是给机器看的,好的代码应该是那种一眼就明白作者要干什么的代码(比如我写的Fuck方法,从名字上就可以看出作者的愤怒)。机器其实看汇编语言比看高级程序设计语言还方便呢。