python中的中值程序

python中的中值程序,python,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()

我试图用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)

您不应该使用while,where可以使用if,因为它会进入无限循环。使用“如果”

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

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

# rest of the code

代码有两处错误

首先,代码存在缩进问题

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

data.append(value)
在这段代码中,值永远不会追加到数据中,因为这在while块之外<代码>值!=“”将始终以
True
进行计算,因为
永远不会更改

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

无法将“”转换为浮点

这是固定密码

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)

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

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)

python的美妙之处在于,您不必每次坐下来编写脚本时都自己重新发明轮子。这包括

此示例还显示了一个正确的
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

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

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

data.sort()
现在,
数据
已排序,您可以使用逻辑提取中值

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


使用赋值表达式(walrus运算符)删除双输入提示就是一个很好的例子。另一个例子是如何使用~operator计算中值,而不是查找中上值。您只需对中间值求反,然后从末尾开始取列表中的值。例如~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.")

当你想要中位数时,为什么在标题中称之为“mean”呢?什么是“不能正常工作”呢?你是如何启动它的?你给什么作为输入?我在anaconda中启动它,当我运行它,并尝试输入一个数字时,程序什么都不做,实际上什么都不做。因为它在
循环中卡住了。除了干预之外,没有什么能摆脱这种局面;它不要求任何新的输入或任何东西,只要你进入循环,它就会不断循环
value=float(value)
永远不会给出
value==“”
value!=“
总是正确的。这两行代码将永远运行。好吧,非常感谢您的建议,很抱歉只是尝试学习编程。@奈特:没问题,我们都犯了错误。我认为OP确实需要一个
while
循环,所以他们可以输入许多数字(而不是像
for
循环那样的预定义数量),非常感谢。非常感谢您的帮助。我只是简单地问一个问题,在python中学习调试是什么?你是否有一些文献可以学习,或者只是练习和练习编码?如果你愿意,你可以使用调试器,比如pdb,或者直接使用IDE,比如Pycharm。对于简单的程序,您可以只添加打印!
data = []
while True:
    value = input("Enter a value (blank line to quit): ")
    try:
        data.append(float(value))
    except ValueError:
        break

data.sort()
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.")