我正在尝试在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)
答案 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.")