Python中位数程序

时间:2019-05-16 15:51:01

标签: python

我正在尝试在Python中实现中位数,但是当我运行脚本时,它无法正常工作。但是停下来,什么也没有发生。

中位数计划

data = []
value = input("Enter a value (blank line to quit): ")

while value != " ":
     value = float(value)

data.append(value)
value = input("Enter a value (blank line to quit): ")
data.sort()

if len(data) == 0:
    print("No values were entered: ")
elif len(data) % 2 == 1:
     median = data[len(data) // 2]
     print("The median of those values is", median)
else:
    median = (data[len(data) // 2] + data[len(data) // 2 - 1]) / 2
    print("The median of those values is", median)

6 个答案:

答案 0 :(得分:3)

该代码有两个错误。

第一个,代码存在缩进问题。

while value != " ":
     value = float(value)

data.append(value)

在此代码中,值永远不会添加到数据中,因为它位于while块之外。 value != " "将永远在True处评估,因为value永远不会改变。

第二个是空白行不是" "而是""。因此,在缩进固定的代码中,将导致错误。

  

无法将“”转换为浮点数

这是固定代码

data = []
value = input("Enter a value (blank line to quit): ")

while value != "":
    value = float(value)

    data.append(value)
    value = input("Enter a value (blank line to quit): ")
    data.sort()

if len(data) == 0:
    print("No values were entered: ")
elif len(data) % 2 == 1:
     median = data[len(data) // 2]
     print("The median of those values is", median)
else:
    median = (data[len(data) // 2] + data[len(data) // 2 - 1]) / 2
    print("The median of those values is", median)

答案 1 :(得分:1)

您不应该在可以使用'if'的地方使用'while',因此它会陷入无限循环。使用'if'

data = []
value = input("Enter a value (blank line to quit): ")

if value != " ":
 value = float(value)

# rest of the code

答案 2 :(得分:1)

python的优点在于,您每次坐下来编写脚本时都不必自己重新发明轮子。包含There is already a statistics module (standard with python)

.median() functionality
import statistics
data = []
while True:
    user_input = input("Enter a value (blank line to quit):\n>>>")
    if user_input == "":
        break
    else:
        data.append(float(user_input)) # probably should catch the errors here
        # ^^ user inputs may not be able to be parsed into float format!
print("Median of input values: {}".format(statistics.median(data)))

此示例还显示了一个正确的while循环,该循环接受用户输入,直到输入空行为止。这里没有捕获错误(可能是您应该实现的功能)。

示例运行:

Enter a value (blank line to quit):
>>>56.2
Enter a value (blank line to quit):
>>>26.4
Enter a value (blank line to quit):
>>>700.95
Enter a value (blank line to quit):
>>>
Median of input values: 56.2

Process finished with exit code 0

答案 3 :(得分:0)

在第一个输入value保持不变之后,您将陷入无限输入中。如果要实现所描述的功能,则您的代码应如下所示:

data = []

while True:
    value = input("Enter a value (blank line to quit): ")

    if value == '':
        break
    else:
        value = float(value)
        data.append(value)

data.sort()

if len(data) == 0:
    print("No values were entered: ")
    exit(0)

elif len(data) % 2 == 1:
    median = data[len(data) // 2]

else:
    median = (data[len(data) // 2] + data[len(data) // 2 - 1]) / 2

print("The median of those values is", median)

答案 4 :(得分:0)

如果我猜对了,您想要读取一个数字并按Enter键,依此类推,直到用户输入空白行。
在这种情况下,输入部分应为:

data = []
while True:
    value = input("Enter a value (blank line to quit): ")
    if value == " ":
        break
    else:
        data.append(float(value))

data.sort()

现在data已排序,您可以使用逻辑来提取中位数。

更好的方法可能是使用try except块检查值是否正确,并在给出无效数字后立即中断循环(即{{1 }}引发异常。

ValueError

答案 5 :(得分:0)

使用赋值表达式(海象运算符)删除双输入提示是一个完美的例子。另一个示例是如何使用〜运算符来计算中位数,而不是查找上中间值,您可以取反中间值并从末尾取值。例如〜2 = -3。在列表中使用负索引会从末尾找到一个值。

data = []

while value := input("Enter a value (blank line to quit): "):
    data.append(float(value))

data.sort()

if data:
    mid = len(data) // 2
    median = (data[mid] + data[~mid]) / 2
    print(f"The median of those values is {median}")
else:
    print("No values were entered.")