[英]Python nested loops - no output
我刚刚开始学习python。 我试图检查整数x是否是回文,然后将其除以范围之间的数字(从最大的y即999开始)y = 999,998,...,100。 如果x / y = z并且z也是3位整数,则结束。 否则,从x减去1并执行相同的步骤。
def EuQ4():
x=998001
p=999
while 10000 < x:
x=x-1
if str(x)== str(x)[::-1]:
while p>100:
if x%p==0:
Pal=x/p
if Pal < 999:
print (Pal,p)
break
else:
x=x-1
else:
p=p-1
else:
x=x-1
EuQ4()
这是来自Euler项目的问题4,即找到由两个3位数字的乘积构成的最大回文。
您这里有一些逻辑错误。 有些原因循环永远不会结束。 例如,当x % p == 0
但Pal
大于999
时会发生什么? 您将得到一个无限循环。
我做了一些修改,但仍然可以使用。
def EuQ4():
x = 998001
while 10000 < x:
if str(x) == str(x)[::-1]:
print("{} is a pali!".format(x))
# Move it here so each time it stats at the right
# number or else it will just skip it after it does it once.
p = 999
while p > 100:
if x % p == 0:
pali = int(x / p)
if pali < 999:
print(pali, p)
return
p -= 1
x -= 1
EuQ4()
编辑:
我通过在IDE中使用调试器发现了这些错误。 您可以通过逐行浏览几次代码来轻松完成相同的操作。
抱歉,阅读您的问题很伤脑筋。 如果您在尝试这些问题时尝试学习Python,那么我将建议您提供替代答案-它不能回答您的问题,但确实可以解决问题,并且我认为它更像Python。 该问题要求找到由两个3位数字的乘积制成的最大的palindrone。 因此,输入应为3位数字。 该代码将允许您指定最大和最小位数(以整数形式)。
我并不是在提议欧拉问题提出的最佳解决方案,而是要让您了解Python的一系列功能。
def min_value(integer):
min_val = '1'
for n in range(0,integer-1):
min_val+='0'
return int(min_val)
def max_value(integer):
max_val = '9'
for n in range(0,integer-1):
max_val += '9'
return int(max_val) +1
def find_max_palindrones(x,y):
minimum_value = min_value(x)
maximum_value = max_value(y)
palindrones = []
working_range = [number for number in range(minimum_value,maximum_value,1)]
for x_value in working_range:
for y_value in working_range:
product = x_value * y_value
orig_order = [item for item in str(product)]
rev_order = [item for item in str(product)[::-1]]
if orig_order == rev_order:
palindrones.append(product)
max_p = max(palindrones)
return max_p
>>>find_max_palindrones(3,3)
906609
while p > 100
之前将p=999
放进去while p > 100
或者将for p in range(999, 100, -1)
。
p = 999
while p > 100
而且我认为您多次致电x=x-1
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.