#python
Вопрос:
Я хочу создать программу, которая будет запрашивать ввод, пока не будет введена новая строка. Пользовательский ввод будет отображаться в списке. Затем он вычислит среднее и стандартное отклонение входных данных. Я написал следующий код, но он показывает некоторые ошибки типа данных для функции stddev.
def main():
print("Enter the data, one value per line.nEnd by entering empty line.")
a = []
prompt = ""
line = input(prompt)
while line:
a.append(float(line))
line = input(prompt)
meanfunction(a)
stdev(a)
print("The mean of given data was: ",meanfunction(a))
print("The standard deviation of given data was: ",stdev(a))
def meanfunction(data):
average = sum(data) / len(data)
average_f = "{:.2f}".format(average)
return average_f
def variance(data):
n = len(data)
mean = sum(data) / n
deviations = [(x - mean) ** 2 for x in data]
variance = sum(deviations) / (n)
variance_f = "{:.2f}".format(variance)
return variance_f
def stdev(data):
import math
var = variance(data)
std_dev = math.sqrt(var)
return std_dev
if __name__ == "__main__":
main()
Ответ №1:
Исправив отступ, проблема, по-видимому, заключается в вашей строке формата variance(data)
непосредственно перед строкой возврата. Вы используете вывод variance
в качестве входных данных в stdev
функции, но variance
возвращаете строковый вывод. Похоже meanfunction
, он делает то же самое.
Как правило, для этих математических функций было бы лучше просто заставить их придерживаться того, что они должны делать: возвращать число, как вы уже делаете с stdev
возвращением. Разберитесь с тем, чтобы сделать его красивым, когда дело доходит до фактической печати на экране.
Также неплохо сделать имена переменных более описательными, чем «a», особенно когда мы приходим посмотреть на наш старый код! Наконец, мы обычно хотим поставить импорт на самый верх.
import math
def main():
print("Enter the data, one value per line.n"
"End by entering an empty line.")
user_values = []
prompt = ""
line = input(prompt)
while line:
user_values.append(float(line))
line = input(prompt)
meanfunction(user_values)
stdev(user_values)
print(f"The mean of the given data was: {meanfunction(user_values):.2f} ")
print(f"The standard deviation of the given data was: {stdev(user_values):.2f}")
def meanfunction(data):
average = sum(data) / len(data)
return average
def variance(data):
n = len(data)
mean = sum(data) / n
deviations = [(x - mean) ** 2 for x in data]
variance = sum(deviations) / (n - 1)
return variance
def stdev(data):
var = variance(data)
std_dev = math.sqrt(var)
return std_dev
if __name__ == "__main__":
main()
Комментарии:
1. Хорошие улучшения. Ему также не нужны те одинокие
meanfunction
иstdev
звонки, которые ничему не назначены. (Кроме того, спрашивающий исправил их отступ.)