任何整数的 Python 方法都返回仅由数字 5 和 7 组成的列表



开发一个 Python 方法,对于 24 到 1000 范围内的任何整数量,返回一个仅由数字 5 和 7 组成的列表,使得它们的总和等于金额。例如,change(28)可能返回[7, 7, 7, 7],而change(49)可能返回[7, 7, 7, 7, 7, 7, 7][5, 5, 5, 5, 5, 5, 5, 7, 7][7, 5, 5, 5, 5, 5, 5, 5, 7]

我试过了:

def change(amount):
if amount == 24:
return [5, 5, 7, 7]
change(24)
print (amount)

但我认为有更有效的方法可以做到这一点..有什么帮助吗?

首先,您在第print (amount)行的代码中有一个错误,因为amount不是在全局范围内定义的,它只是定义为change()函数的局部参数。 你应该写print(change(24))

其次,您的代码仅管理输入量 24,没有其他内容。您必须设计一种算法来为任何输入数字解决问题。使用Python,你可以以一种直接的方式找到一对数字(i,j(,其中i*5+j*7==数量。您可以检查任何对值的这种相等性:例如,i 从 0 到金额,j 从 0 到金额。 找到这种相等性后,您可以构建包含 5 和 7 的列表并返回。

实际上在Python中:

  • 用 i 从 0 循环到 amount-1:for i in range(amount):
  • 用 j 从 0 循环到 amount-1:for j in range(amount):
  • 要检查相等性:if (i*5)+(j*7) == amount:
  • 要生成并返回列表,请执行以下操作:return [5]*i + [7]*j

显然,你必须学习Python的基础知识才能正确使用它。

如果你刚开始用Python编码,那么下面的代码就是为你构建的。也许它不是特别复杂,但对于任何初学者来说都是可以理解的:

def five_and_seven_list(number):
if number < 24 or number > 1000:
return False
elif number % 7 == 0:
result = []
start = int(number / 7)
for i in range(start, 0,-1):
result.append(7)
return result
elif number % 5 == 0:
result = []
start=int(number / 5)
for i in range(start, 0,-1):
result.append(5)
return result
else:
end=0
for i in range(1, 10):
if (number - i) % 10 == 0:
end = i
break
if end == 1:
result = [7, 7, 7]
if end == 6 or end == 2 or end == 7:
result = [7, 5]
if end == 4:
result = [7, 7]
if end == 8:
result = [7, 7, 7, 7]
if end == 3:
result = [7, 7, 7, 7, 5]
if end == 9:
result = [7, 7, 5]
left = int((number - sum(result)) / 5)
while left > 0:
left -= 1
result.append(5)
return result
print(five_and_seven_list(28),five_and_seven_list(49),five_and_seven_list(47))

输出为:

[7, 7, 7, 7]
[7, 7, 7, 7, 7, 7, 7]
[7, 5, 5, 5, 5, 5, 5, 5, 5]
  1. 用 x 的数量循环第一个数字,如下所示:for x in range(amount):
  2. 循环第二个数字,其
  3. 数量为 y 如下所示:for y in range(amount):
  4. 提供 if 语句是为了显示 x * 5 + y * 7 是否等效于给定的函数参数:if (x*5)+(y*7) == amount:
  5. 最后但并非最不重要的一点是,我们返回已证明的等价性,因此当我们调用函数时,它将显示列出的 5 和 7,这是我们函数中给出的数量之和:return [5]*x + [7]*y

代码应该或多或少如下所示:

def change(amount): 
for x in range(amount): 
for y in range(amount):
if (x*5)+(y*7) == amount:
return [5]*x + [7]*y