Как я могу принять несколько входов от пользователя? - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь создать программу, в которой 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 голосов
/ 30 апреля 2018

Такое решение работает для меня.

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)))
0 голосов
/ 30 апреля 2018

Метод __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)

Преимущество этого подхода заключается в том, что вы можете получить произвольное количество значений от пользователя.

0 голосов
/ 30 апреля 2018

Вы передаете список как один аргумент, вам нужно расширить список, чтобы распаковать список, который вы можете использовать *

myClass(*list())
0 голосов
/ 30 апреля 2018

Вы можете назвать свой скрипт с помощью: scriptname n*<param^n> Так что для вас это будет python script.py number1 number2 number3

Вы можете получить к ним доступ в Python с помощью sys.argv[1-3], sys.argv[0] всегда является именем сценария

...