如何从用户那里获取多个输入?

时间:2018-04-30 08:52:26

标签: 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.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())

目标: 我想拿三个输入来找到平均值。

4 个答案:

答案 0 :(得分:1)

您班级的__init__()方法需要3个位置参数(除self之外),但您的代码只传递一个 - 用户输入的数字列表。您需要将每个数字作为单独的参数传递。您可以使用*运算符来解压缩列表中的项目,并将它们作为单独的参数传递:

my_class2 = my_class(*[float(input("Enter number %s: "%i)) for i in range(3)])

这将解决当前的问题,但是,如果您的类接受了数字列表,将其绑定到对象的属性,则会更灵活。然后,您的平均方法会使用列表计算平均值,或者只使用statistics.mean()

from statistics import mean

class my_class(object):
    def __init__(self, numbers):
        self.numbers = numbers

    def defAvrg(self):
        return mean(self.numbers)

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

答案 1 :(得分:0)

您可以通过以下方式致电您的脚本:scriptname n*<param^n> 所以对你而言,它将是python script.py number1 number2 number3

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

答案 2 :(得分:0)

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

myClass(*list())

答案 3 :(得分:-1)

这样的解决方案适合我。

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)))