Среднее 3 числа выходит неправильно - PullRequest
0 голосов
/ 16 января 2020

Я хочу найти среднее значение для 3 чисел, введенных пользователем.

    val1, val2, val3 = int(sys.argv[1]), int(sys.argv[2]), int(sys.argv[3])

    print val1, val2, val3

    avr = ((val1 + val2 + val3) / 3)
    print avr
    print "%02.f" % avr

Учитывая 3 числа 60, 39 и 92 и набрав python.exe calculator.py 60 39 92 в терминале, я получаю:

Вывод:

60 39 92
63
63.00

Вывод должен показывать в среднем 63,67, а не 63,00. Где я go ошибся?

Ответы [ 3 ]

3 голосов
/ 16 января 2020

В python 2 попытка деления на целые всегда будет давать int, даже если результатом обычно будет float. Решением этой проблемы является преобразование целых чисел в числа с плавающей запятой (принципиально другой тип данных), вместо этого ИЛИ используйте 3.0 вместо 3 (так как первое читается как число с плавающей точкой, а второе - целое число):

val1, val2, val3 = float(sys.argv[1]), float(sys.argv[2]), float(sys.argv[3])

или

avg = (val1 + val2 + val3) / 3.0

Если все числа являются числами с плавающей точкой, а не целыми числами, то результатом будет число с плавающей точкой.


Если бы вы использовали python 3 (что следует; python2 официально больше не поддерживается), это не является проблемой: целочисленное деление имеет свой собственный оператор //, и этот тип операции всегда будет вызывать float, если ответ не будет целым числом.

2 голосов
/ 16 января 2020

Вы вводите переменные как целое число, тогда средний результат также будет целым числом. Затем вы печатаете его как float, вот где вы не правы. Если вы все еще хотите получить результат с плавающей точкой, попробуйте:

val1, val2, val3 = float(sys.argv[1]), float(sys.argv[2]), float(sys.argv[3])

1 голос
/ 16 января 2020

В Python 2, если вы разделите целое число на другое целое число, это приведет к целому числу. Вы можете разделить на число с плавающей точкой, чтобы исправить это:

avr = (val1 + val2 + val3) / 3.0
...