簡體   English   中英

使用Numpy查找輸入數字集的均值,中值,模式或范圍

[英]Using Numpy to find Mean,Median,Mode or Range of inputted set of numbers

我正在創建一個程序來查找Mean,Median,Mode或Range。 當我運行它時它工作正常,直到它到達計算答案的部分。 它給了我一個“無法預先形成減少靈活類型”的錯誤。 我搜索了這個錯誤但找不到我需要解決的問題。 這是我第一次使用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()

您正在將字符串傳遞給不允許的函數。

>>> 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

您需要從中生成數組或列表。

>>> np.average(list(map(float, meanNumbers.split())))
3.5

如果你用逗號分隔元素,請用逗號分隔。

>>> np.average(list(map(float, meanNumbers.split(','))))
    3.5

這不是一個答案(請參閱@Sukrit Kalra對此的回應),但我認為有機會演示如何編寫我無法忽略的更清晰的代碼。 您有大量的代碼重復,將來會導致難以維護的代碼。 試試這個:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM