Python 如何从用户处获取多个输入?

Python 如何从用户处获取多个输入?,python,python-3.x,function,class,average,Python,Python 3.x,Function,Class,Average,我正在尝试创建一个程序,python将使用多个输入来计算输入的平均值,但它不起作用,尽管我搜索了很多,但我的问题与使用类时的其他问题不同。 我的代码如下: class my_class(object): def __init__(self, number1, number2, number3): self.number1 = number1 self.number2 = number2 self.numbe

我正在尝试创建一个程序,python将使用多个输入来计算输入的平均值,但它不起作用,尽管我搜索了很多,但我的问题与使用类时的其他问题不同。 我的代码如下:

 class my_class(object):
        def __init__(self, number1, number2, number3):
            self.number1 = number1
            self.number2 = number2
            self.number3 = number3

        def defAvrg(self):  # get the defAvrg of three numbers
            return  (self.number1 + self.number2 + self.number3)/3
            #resulin = resulted / 3
            #return resulted
   my_class2 = my_class([float(input("Enter number %s: "%i)) for i in range(3)])
   print(my_class2.defAvrg())
目标:
我想用三个输入来找到平均值。

您可以使用以下命令调用脚本:
scriptname n*
因此,对于您来说,它应该是
python script.py number1 number2 number3

您可以使用Python中的
sys.argv[1-3]
访问它们,
sys.argv[0]
始终是脚本名

类的
\uuuu init\uuuu()
方法需要3个位置参数(除了
self
),但您的代码只传递一个-用户输入的数字列表。您需要将这些数字作为单独的参数传递。您可以使用
*
运算符来解压缩列表中的项目,并将其作为单独的参数传递:

my_class2 = my_class(*[float(input("Enter number %s: "%i)) for i in range(3)])
这将解决眼前的问题,然而,若您的类接受一个数字列表,并将其绑定到对象的属性,那个么它将更加灵活。然后,您的平均值方法将使用列表计算平均值,也可以简单地使用:


这种方法的优点是,您可以从用户处收集任意数量的值。

如果要将列表作为单个参数传递,则需要展开列表,以解压缩可以使用的列表*

myClass(*list())

这样的解决方案对我很有效

numbers = list()
for i in range(0, 3):
    inputNr = int(input("Enter a number: "))
    if(inputNr == -99):
        break

    numbers.append(inputNr)

#Then we take all of the numbers and calculate the sum and avg on them
sum = 0
for j, val in enumerate(numbers):
    sum += val

print("The total sum is: " + str(sum))
print("The avg is: " + str(sum / len(numbers)))

那么您面临的问题是什么呢?这些代码真的必须在类中吗?我认为这不是对类的适当使用。为什么不将数字存储在一个列表中,而不是存储在3个单独的属性中?并使
defAvrg
方法成为一个正常的函数,以数字列表作为输入?@Aran Fey:这一点很好,使用它来代替编写任何函数。@Aran Fey:我没有寻找重复的函数。如果你看过一些,那么你可以投票结束。我还想补充一些建议,我现在已经这样做了。我注意到你扩展了你的答案,所以我删除了我之前的评论,因为它现在给出了重复不会给出的建议。我想我评论得太快了。谢谢。。。我在努力学习人,你为什么给我地雷?@Barishasen:我给你什么“地雷”?这个答案有几个问题只适用于整数。如果用户真的想输入
-99
?不需要使用
enumerate()
。当可以使用
sum()
等时,为循环手工编写,用于对列表中的数字求和。请提供更好的解决方案,而不是给出负数。我们都在努力学习。减号是不必要的……我对你的答案投了反对票,基于我之前评论中列出的原因,我认为你的答案很差。我知道你是新来的,很高兴你花时间发布了一个答案,但这就是它的工作原理。投票是社区对答案进行集体排序的方式,这有助于未来可能有类似问题的读者找到最佳解决方案。顺便说一句,我在之前的回答中已经发布了一个解决方案(我认为更好)。非常感谢。由于我是新手,有时因为降级而被禁止提问,这就是为什么我不希望被降级。我现在明白了降级背后的逻辑。顺致敬意,
numbers = list()
for i in range(0, 3):
    inputNr = int(input("Enter a number: "))
    if(inputNr == -99):
        break

    numbers.append(inputNr)

#Then we take all of the numbers and calculate the sum and avg on them
sum = 0
for j, val in enumerate(numbers):
    sum += val

print("The total sum is: " + str(sum))
print("The avg is: " + str(sum / len(numbers)))