当前位置: 首页 > 知识库问答 >
问题:

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

姬歌者
2023-03-14

我的老师想让我通过迭代找到用户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个答案

柴声
2023-03-14

首先,正如一个用户在对你的问题的评论中指出的,你确定质数的方法是不正确的。您只应在检查完所有因素后增加该计数器,而不是在检查完每个因素后。

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

至于你的主要问题:SO有几个关于在未排序列表中查找中位数的问题(这与在没有整个列表的情况下搜索中位数非常相似)。也许在没有Python标签的情况下搜索它,这样你就可以看到一些算法,而不会与特定语言联系起来。

例如,在这个问题中,您可以找到使用中值法的建议(维基百科)。

安博文
2023-03-14
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()
 类似资料:
  • 问题内容: 我有一个2的幂的整数输入(1、2、4、8等)。我希望函数不使用log()返回位位置。例如,对于上述输入,对于C#,将分别返回{0,1,2,3}。另外,如果可以在SQL中完成。 谢谢! 问题答案: 我发现执行此操作最快的代码来自Bit Twiddling Hacks网站。具体而言,基于DeBruijn序列的查找。参见http://graphics.stanford.edu/~seande

  • 本文向大家介绍如何在C#中不使用foreach的情况下从列表复制项目到列表?,包括了如何在C#中不使用foreach的情况下从列表复制项目到列表?的使用技巧和注意事项,需要的朋友参考一下 List <T>是强类型对象的集合,可以通过索引对其进行访问,并具有用于排序,搜索和修改列表的方法。它是System.Collection.Generic命名空间下的ArrayList的常规版本。 List <T

  • 问题内容: 我想更改数据库表的列位置而不丢失数据。 例如: 当前表: 到 问题答案: 试试这个:

  • 我想在不丢失数据的情况下更改数据库表的列位置。 例如: 当前表格: 到

  • rbindlist做的正是我需要的,但'do.call'做不到! do.Call不是我想要的

  • 问题内容: 我有一个列表看起来像这样: 我想把它弄平 有没有使用numpy的轻量级功能来执行此操作? 问题答案: 如果没有numpy(),一种使用方式 是: 或者作为另一种Python方式,您可以使用 列表理解 : 另一个非常适合短列表的功能方法也可以在Python2和Python3中使用(不要将其用于长列表): 为了使其更快一点,您可以使用内置,而不是: 基准: 使用@Will答案的基准测试(对