[英]Using Numpy to find Mean,Median,Mode or Range of inputted set of numbers
I am creating a program to find Mean,Median,Mode, or Range. 我正在创建一个程序来查找Mean,Median,Mode或Range。 When I run this it works fine until it gets to the part of calculating the answer. 当我运行它时它工作正常,直到它到达计算答案的部分。 It gives me a "cannot preform reduce with flexible type" error. 它给了我一个“无法预先形成减少灵活类型”的错误。 I have searched this error but could not find what I needed to fix. 我搜索了这个错误但找不到我需要解决的问题。 This is my first time using numpy so any help would be great. 这是我第一次使用numpy,所以任何帮助都会很棒。
import sys
import numpy as np
welcomeString = input("Welcome to MMMR Calculator\nWhat would you like to calculate(Mean,Median,Mode,Range):")
if welcomeString.lower() == "mean":
meanNumbers = input("What numbers would you like to use?:")
print (np.average(meanNumbers))
stop = input()
if welcomeString.lower() == "median":
medianNumbers = input("What numbers would like to use?:")
print (np.median(medianNumbers))
stop = input()
if welcomeString.lower() == "mode":
modeNumbers = input("What numbers would you like to use?:")
print (np.mode(modeNumbers))
stop = input()
if welcomeString.lower() == "range":
rangeNumbers = input("What numbers would you like to use?:")
print (np.arange(rangeNumbers))
stop = input()
You are passing a string to the functions which is not allowed. 您正在将字符串传递给不允许的函数。
>>> meanNumbers = input("What numbers would you like to use?:")
What numbers would you like to use?:1 2 3 4 5 6
>>> np.average(meanNumbers)
#...
TypeError: cannot perform reduce with flexible type
You need to make an array or a list out of them. 您需要从中生成数组或列表。
>>> np.average(list(map(float, meanNumbers.split())))
3.5
IF you're seperating the elements by commas, split on the commas. 如果你用逗号分隔元素,请用逗号分隔。
>>> np.average(list(map(float, meanNumbers.split(','))))
3.5
This is not an answer (see @Sukrit Kalra's response for that), but I see an opportunity to demonstrate how to write cleaner code that I cannot pass up. 这不是一个答案(请参阅@Sukrit Kalra对此的回应),但我认为有机会演示如何编写我无法忽略的更清晰的代码。 You have a large amount of code duplication that will result in difficult to maintain code in the future. 您有大量的代码重复,将来会导致难以维护的代码。 Try this instead: 试试这个:
import sys
import numpy as np
welcomeString = input("Welcome to MMMR Calculator\nWhat would you like to calculate(Mean,Median,Mode,Range):")
welcomeString = welcomeString.lower() # Lower once and for all
# All averages need to do this
numbers = input("What numbers would you like to use?:")
numbers = list(map(float, numbers.split(','))) # As per Sukrit Kalra's answer
# Use a map to get the function you need
average_function = { "mean": np.average,
"median": np.median,
"mode": np.mode,
"range": np.arange,
}
# Print the result of the function by passing in the
# pre-formatted numbers from input
try:
print (average_function[welcomeString](numbers))
except KeyError:
sys.exit("You entered an invalid average type!")
input() # Remove when you are done with development
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.