编程对我来说是新手,这是我作为程序员的第三天,我试图解决Euler项目的问题,然后陷入了问题4:
找到由两个3位数字的乘积组成的最大回文。
这是我的解决方案:
for a in range(100, 1000):
for b in range(100, 1000):
if str(a * b) == str(a * b) [ : :-1]:
largest = max(a *b)
print(largest)
我发现没有largest = max(a * b)
行的所有回文,但是找不到最大的回文数,并且对max
函数的用法感到困惑。您能帮我解释一下吗?
答案 0 :(得分:6)
max
与一组数字(2个或更多)一起使用,而不仅仅是一个,您可以使用自己的变量来模仿它:
largest = 0 # this will hold the maximum palindrome
for a in range(100, 1000):
for b in range(a, 1000):
c = a * b # calculate a * b one time only for each iteration
if (str(c) == str(c)[::-1]) and c > largest:
largest = c
print(largest) # ===> 906609
第二个循环从a
开始,以避免重复计算(例如:将计算100 * 999
但不会计算999 * 100
,因为乘法是可交换的。)
使用max
,您可以这样做:
largest = max(a * b for a in range(100, 1000) for b in range(a, 1000) if str(a * b) == str(a * b)[::-1])
print(largest) # ===> 906609
而且,在Python 3.8+中,您可以使用walrus运算符为每次迭代仅一次计算a * b
:
largest = max(c for a in range(100, 1000) for b in range(a, 1000) if str(c := a * b) == str(c)[::-1])
print(largest) # ===> 906609
答案 1 :(得分:1)
您的代码中存在逻辑问题。
您要遍历所有“ a”,然后要遍历所有“ b”。 对于所有“ a”中的所有“ b”,您说的最大是单个数字“ a * b”的最大值(这没有多大意义),然后打印出来。
您有两种解决方案:
答案 2 :(得分:1)
您可以在可迭代的对象上使用max
内置函数:
来自docs:
max(arg1,arg2,* args [,key])
以可迭代形式返回最大的项,或者返回两个或多个中的最大项 争论。
您可以使用:
max(a * b for a in range(100, 1000) for b in range(100, 1000) if str(a * b) == str(a * b) [ : :-1])
输出:
906609
答案 3 :(得分:1)
按照MrGeek的回答,您可以这样使用max()函数(需要两个参数或一个列表):
largest = 0 # this will hold the maximum palindrome
for a in range(100, 1000):
for b in range(a, 1000):
c = a * b
if (str(c) == str(c)[::-1]):
largest = max(c, largest)
print(largest)
以下是该功能的文档:
答案 4 :(得分:1)
(max / min)函数应用于迭代查找(最大/最小)值。因此,您需要将值存储在列表中并应用该函数。
palindrome_lst = list()
for a in range(100, 1000):
for b in range(100, 1000):
if (str(a*b))==(str(a * b)[ : :-1]):
pal = str(a*b)
palindrome_lst.append(int(pal))
print(max(palindrome_lst))
答案 5 :(得分:0)
max()
是在此处使用的错误函数。以max(any_number)
为标量值的any_number
的结果将始终是any_number
本身的值。
您需要做的是跟踪迄今为止发现的最大的回文。而且,如果您发现一个大于该值的palindrom,请覆盖记录采用变量:
# This variable keeps track of the largest palindrom found
largest = 0
for a in range(100, 1000):
for b in range(100, 1000):
res = a * b
# Check if you found a palindrome
if str(res) == str(res) [::-1]:
# Check if the found palindrom is larger
# than the currently largest found palindrome
if res > largest:
largest = res
print(largest)