在不使用列表的情况下如何找到中位数?

时间:2018-11-03 05:58:31

标签: python

我的老师希望我通过迭代从用户那里找到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

2 个答案:

答案 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)的建议。