我的老师希望我通过迭代从用户那里找到10个输入的中位数。
这就是我使用迭代来求和,奇数数量,最大值和质数数量的方法。但是我一直在寻找中位数。
def Main(): #main function
sum=0
odd=0
temp=0
prime=0
median=0
for i in range(10):
x=float(input("Please enter a number")) #ask user for input 10 times
sum=sum+x #adds all inputs together
if x%2!=0: #all even numbers are divisible by 2
odd=odd+1
if x>=temp: #update temp with current largest input
temp=x
for p in range (2,int(math.sqrt(x))+1):#find prime numbers
if x>=2 and x%p==0: prime=prime+1
答案 0 :(得分:0)
import math
def Main(): #main function
sum=0
odd=0
temp=0
prime=0
median=0
my_list =[]
for i in range(10):
x=float(input("Please enter a number: ")) #ask user for input 10 times
sum=sum+x #adds all inputs together
if x%2!=0: #all even numbers are divisible by 2
odd=odd+1
if x>=temp: #update temp with current largest input
temp=x
for p in range (2,int(math.sqrt(x))+1):#find prime numbers
if x>=2 and x%p==0: prime=prime+1
my_list.append(x)
my_list.sort()
size =len(my_list)
if size == 1:
median = my_list[0]
elif size % 2 == 0:
size = int(size/2)
median=(my_list[size-1]+my_list[size])/2
else:
median = my_list[int(size / 2)]
print("sum is ", sum, ",odd is ", odd, ",temp is ", temp, ",prime is ", prime, "median is ", median)
Main()
答案 1 :(得分:0)
首先,正如用户在对您的问题的评论中指出的那样,确定质数的方法不正确。仅在检查完所有因素之后,才应增加该计数器,而不是在每个因素之后。
关于StackOverflow的几个问题,展示了如何在python中计算素数;这是您的代码的稍有改进的版本,已修复该错误(以及一些样式改进建议):
def main():
sum = 0
counter_odd = 0
max_num = None
min_num = None
counter_prime = 0
median = 0
for i in range(10):
x = float(input("Please enter a number"))
sum += x
if x % 2 != 0:
counter_odd += 1
if max_num is None or max_num < x:
max_num = x
if min_num is None or min_num > x:
min_num = x
if x == 0 or x == 1:
counter_prime += 1
elif x > 1:
if not any(x % d == 0 for d in range(2, int(math.sqrt(x)) + 1)):
counter_prime += 1
关于您的主要问题:关于在未排序列表中查找中位数的问题上有几个问题(这与在不包含整个列表开头的情况下搜索中位数非常相似)。也许可以在没有Python标记的情况下进行搜索,因此您无需查看特定的语言即可了解一些算法。
例如,在this question中,您可以找到使用median of medians approach (Wikipedia)的建议。