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

2024-09-26 22:49:55 发布

您现在位置:Python中文网/ 问答频道 /正文

开发一个Python方法,对于24到1000范围内的任何整数,返回一个仅由数字5和7组成的列表,以便它们的和等于amount。例如,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)

但是我认为有更有效的方法来做这个把戏。。有什么帮助吗?你知道吗


Tags: 方法列表returnifdef数字整数change
3条回答

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

其次,您的代码只管理输入量24,而不管理其他内容。你必须设计一个算法来处理任何输入的数字。使用Python,您可以直接找到一对数字(i,j),i*5+j*7==amount。您可以检查任何对值的相等性:例如,i从0到amount,j从0到amount。一旦找到了这个等式,就可以用5s和7s构建列表并返回。你知道吗

实际上在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的基础知识才能正确地使用它。你知道吗

  1. 将第一个数字与此处显示的数量x循环:for x in range(amount):
  2. 用y循环第二个数字,其数量如下:for y in range(amount):
  3. if语句用于显示x*5+y*7是否等价于给定的functions参数:if (x*5)+(y*7) == amount:
  4. 最后但并非最不重要的是,我们返回我们证明的等价性,因此当我们调用函数时,它将显示列出的5s和7s,这是我们函数中给定的量的总和: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

如果您刚开始用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]

相关问题 更多 >

    热门问题