【问题标题】:Python *args square using listPython *args 正方形使用列表
【发布时间】:2021-04-18 00:57:27
【问题描述】:

我被问到这个问题是为了了解函数的使用以及传递不同的变量和类型。 它告诉我们使用函数创建一个列表并为其分配任务。

listA=[]
n = int(input("Enter number of elements in the list : "))
def list(n):
    print("\nEnter the elements of your list: ")
    for i in range(n):
        i=input()
        listA.append(i)
list(n)
print("\nThe entered list is: \n",listA)
def square(*args):
    for i in range(len(args)):
         args[i]*=2
square(listA)

【问题讨论】:

  • 不是一个解决方案,而是调用函数“列表”是一个非常糟糕的主意——虽然你的代码可以工作,但这是一个非常糟糕的习惯。
  • 哦,好吧,会那样做。谢谢

标签: python python-3.x list function


【解决方案1】:

你的 square 函数根本不起作用,如果你将一个列表传递给它(就像你正在做的那样),那么 args 将是一个元组: (listA, ) - 即一个单元素元组,其中 args[0] 是列表你已经过去了。然后,您根据元组的长度循环遍历该元组 - 并尝试更改该元组。

问题是您点击的第一个元素是您的列表,然后您尝试执行与 listA*2 等效的操作 - 以便复制 listA 并将其存储回元组(哎呀) - 如果你的代码失败了。

当你打电话时

square(listA) 

您将单个参数传递给 square 函数 - 该参数恰好是一个整数列表,但它是一个单一的东西。

因此,您需要做的是将数字列表转换为一系列数字 - 您可以使用 * 运算符执行此操作,如下所示:

square(*listA)

这里的 * 操作符将列表解包成单独的项目。

这样做的问题在于,既然函数正在获取多个整数,那么您在函数内部对 args 所做的更改现在不会更改 listA。

请注意 - 问题陈述说要使用介于 1 和用户给出的限制之间的值:并不是说你应该使用用户给出的任意值 - 所以虽然你的解决方案会“工作”,但它实际上并没有做什么已被询问。

【讨论】:

    【解决方案2】:

    我不知道为什么这个问题需要可变参数,但是去掉你函数中的解包 (*) for square,它会消除运行时错误。代码中还有其他不正确的地方。首先是您需要在列表函数中附加 int(i) (该名称需要更改),其次, *= 不会平方值。请参阅我的代码以获取更新的建议。

    listA = []
    n = int(input("Enter number of elements in the list : "))
    
    
    def _list(n):
        print("\nEnter the elements of your list: ")
        for i in range(n):
            i = input()
            listA.append(int(i))
    
    
    _list(n)
    print("\nThe entered list is: \n", listA)
    
    
    def square(args):
        for i in range(len(args)):
            args[i] = args[i]*args[i]
    
    
    square(listA)
    print('The squared list is: \n', listA)
    

    例子:

    Enter number of elements in the list : 4
    
    Enter the elements of your list: 
    3
    6
    1
    6
    
    The entered list is: 
     [3, 6, 1, 6]
    The squared list is: 
     [9, 36, 1, 36]
    

    【讨论】:

      【解决方案3】:
      n = int(input("Enter number of elements in the list : "))
      listA = list(range(1, n + 1))
      print("\nThe entered list is: \n", listA)
      def square(args):
          for i in range(len(args)): args[i]**=2
      square(listA)
      print(listA)
      

      【讨论】:

        【解决方案4】:

        这是一个使用列表推导的快速简便的解决方案:

        number = int(input('Enter a number: '))
        print([i ** 2 for i in range(1, number + 1)])
        

        所以这是做什么的:

        希望你理解输入和打印部分。

        关于列表理解:

        基本上它会附加到列表(本身) i 提高到 2 的幂,它会为范围内的每个 i 这样做,所以对于 1、对于 2、对于 3 等等

        换句话说:

        列表将附加到自身 1 的 2 次方,然后 2 的 2 次方,然后 3 的 2 次方,直到达到范围(例如 5,因此它将继续添加到列出正方形,直到 i 为 5,这将是范围的结尾)

        这是否满足要求:

        n = int(input('How many number You want squared?: '))
        
        
        def given(amount_of_numbers):
            temp = []
            for i in range(1, amount_of_numbers + 1):
                temp.append(i)
            return temp
        
        
        def square(list_):
            return [i ** 2 for i in list_]
        
        
        print(square(given(n)))
        

        【讨论】:

        • 它不满足编写使用可变参数的函数的要求。很明显,导师只是想创造繁忙的工作。
        • @TonySuffolk66 我想我错过了那部分,但现在可以了吗?
        • 您的两个函数都使用固定数量的参数。此外,由于 square 函数将 list_ 更改到位,因此也返回它是不正常的。
        • @TonySuffolk66 好的,我知道我的回答在这种情况下基本上没有帮助,但为什么不正常也返回该特定列表?而我应该怎么做?
        • @Matiss - 如果您查看标准库(例如)修改对象的函数/方法,它不会返回相同的对象(例如 list.sort()list.append() 两者返回无。这似乎是一个约定 - 要么就地修改,要么返回一个新对象。如果你有充分的理由让你的函数两者都做,那就太好了。,
        猜你喜欢
        • 1970-01-01
        • 2020-05-25
        • 2019-11-22
        • 1970-01-01
        • 1970-01-01
        • 2013-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多