python中的中值程序
我试图用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()
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.")