我正在尝试创建一个程序,其中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())
目标: 我想拿三个输入来找到平均值。
答案 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)))