1.统计问题

问题描述

求解一组不定长数据的基本统计值,即平均值、标准差、中位数。      

一组数据表示为S=s0, s1, …, sn-1,其算术平均值、标准差分别表示为:

python中求中位数的函数 python编写一个函数求中位数_浮点数

 由于平均数、标准差和中位数是三个不同的计算目标,使用函数方式编写计算程序。  

  • getNum()函数从用户输入获得数据;  
  • mean()函数计算平均值;  
  • dev()函数计算标准差;  
  • median()函数计算中位数

代码 

# text36.py
from math import sqrt


def getNum():  # 获取用户输入
    nums = []
    iNumStr = input("请输入数字(直接输入回车退出): ")
    while iNumStr != "":
        nums.append(eval(iNumStr))
        iNumStr = input("请输入数字(直接输入回车退出): ")
    return nums


def mean(numbers):  # 计算平均值
    s = 0.0
    for num in numbers:
        s = s + num
    return s / len(numbers)


def dev(numbers, mean):  # 计算方差
    sdev = 0.0
    for num in numbers:
        sdev = sdev + (num - mean)**2
    return sqrt(sdev / (len(numbers)-1))


def median(numbers):  # 计算中位数
    sorted(numbers)
    size = len(numbers)
    if size % 2 == 0:
        med = (numbers[size//2-1] + numbers[size//2])/2
    else:
        med = numbers[size//2]
    return med


n = getNum()  # 主体函数
m = mean(n)
print("平均值:{},方差:{:.2},中位数:{}.".format(m, dev(n, m), median(n)))

        程序先后调用getNum()、mean()、dev()和median()函数。利用函数的模块化设计能够复用代码并增加代码的可读性。每个函数内部都采用了简单的语句。

        列表在实现基本数据统计时发挥了重要作用,表现在:

  • 列表是一个动态长度的数据结构,可以根据需求增减少元素;
  • 列表的一系列方法或操作符为计算提供了简单的元素运算手段;
  • 列表提供了对每个元素的简单访问方式及所有元素的遍历方式。

2.识别同构数

问题描述

  1. 程序功能:随机输入若干个不超过2位的正整数(输入-1表示输入结束),找出其中所有同构数并排序输出。(正整数n若是它平方数的尾部,则称n为同构数。如5的平方数是25,且5是25的尾部,那么5就是一个同构数。同理,25的平方为625,25也是同构数)。
  2. 输入输出要求如下: 输入时要求首先判断输入数位数(1-2位)是否正确,判断输入内容是否是数字,(提示:判断一个字符串是否是数字字符可用字符串的isdigit()方法)然后判断是否是同构数, 输出的同构数要求从小到大排序,结果显示在一行,各同构数间空格分隔。(提示:排序可用列表的sort()方法)
  3. 程序运行结果如下图所示:

python中求中位数的函数 python编写一个函数求中位数_字符串_02

代码

import math


def isTGS(n):
    s = str(n*n)
    if n == 1:
        return True
    elif len(s) > 3:
        if s[-2:] == str(n):
            return True
        else:
            return False
    else:
        if s[1:] == str(n):
            return True
        else:
            return False


def getTGS():
    L = []
    s = input().strip()
    while s != "-1":
        if 0 < len(s) <= 2 and s.isdigit():
            n = int(s)
            if n > 0 and isTGS(n):
                L.append(n)
        s = input().strip()
    return L


def main():
    L = getTGS()
    if len(L) == 0:
        print("没有同构数")
    else:
        L.sort()
        print("同构数有:", end="")
        L = [str(i) for i in L]
        print(' '.join(L), end=" ")


if __name__ == '__main__':
    main()

3.四位玫瑰数

描述

四位玫瑰数是4位数的自幂数。自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

例如:当n为3时,有1^3 + 5^3 + 3^3 = 153,153即是n为3时的一个自幂数,3位数的自幂数被称为水仙花数。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

请输出区间【a,b】之间所有4位数的四位玫瑰数,按照从小到大顺序,每个数字一行。a,b为4位数,且a小于等于b。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

代码

import math
def isRose(n):#判断n是否是四位玫瑰数,是返回True,不是返回False
    a=n//1000
    b=n//100%10
    c=n//10%10
    d=n%10
    if math.pow(a,4)+math.pow(b,4)+math.pow(c,4)+math.pow(d,4)==n:
        return True
    else:
        return False
    
def checkNumber(n):#检查字符串n是不是构成4位数,是返回整数n,不是返回-1
    if n[0]!=0 and len(n)==4:
        return int(n)
    else:
        return -1
    
def printRose(a,b):#输出区间【a,b】之间所有的四位玫瑰数,不存在输出提示信息
    n=0
    for num in range(a,b+1):
        if isRose(num)==True:
            print(num)
            n=n+1
    if n==0:
        print("此区间没有四位玫瑰数")
    
def main():
    a=checkNumber(input())
    if a==-1:
        print("第一个数不是四位数")
        return
    b=checkNumber(input())
    if b==-1:
        print("第二个数不是四位数")
        return
    if a<=b:
        printRose(a,b)
    else:
        printRose(b,a)
   
if __name__ == '__main__':
    main()

4.进制转换

描述

输入十进制整数和欲转换的进制数r,将十进制转换为r进制数。(r>=2)‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

编程思想为:调用函数DToR,逐位求模。若该位为大于9的数,则以大写字母代表(提示:大写字母'A'的ASCII码值等于65);若该位为9以下的数,则转换为字符格式。从低位至高位连接字符串并返回结果。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

运行示例如下:先输入一个十进制整数,再输入进制,输出结果。当输入q程序结束。

python中求中位数的函数 python编写一个函数求中位数_python中求中位数的函数_03

 代码

def DToR(m, r):
    t = ""
    while m != 0 and r != 0:
        c = m % r  # 求模
        if (c > 9):
            t = chr(c-10+65)+t
        else:
            t = str(c)+t
        m = m // r  # 整除
    return t


while True:
    ipt = input()
    if ipt == 'q':
        break
    r = int(input())
    rst = DToR(int(ipt), r)
    print("将%s转换为%d进制的结果为:%s" % (ipt, r, rst))

5.完数

描述

如果一个数除该数本身之外的所有因子之和等于这个数,该数是完数。例如:6=1+2+3,6是完数。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬
定义判断完数的函数isPerfect(),如果是返回True,不是返回False‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬
输入一个数,调用该函数判断是否为完数,如果是输出“是完数”,如果不是输出“不是完数”

输入输出示例

‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

输入

输出

示例 

6

7

6是完数

7不是完数

代码

# 函数功能:判断n是否为完数
# 如果是返回Ture,否则返回False
def isPerfect(n):
    sum = 0
    for i in range(1, n):
        if n % i == 0:
            sum += i
    if sum == n:
        return True
    else:
        return False


# 输入一个值,调用函数判断
n = eval(input())
if isPerfect(n) == True:
    print("{}是完数".format(n))
else:
    print("{}不是完数".format(n))

6.计算几何形状的表面积与体积

描述‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

输入一个表示几何形状名称的字符串,再在一行内输入这种图形的数据,根据表示名称的字符串选择合适的公式计算几何形状的(表)面积和体积,若为二维图形,只计算面积,若为三维图形,计算其表面积与体积,结果严格保留2位小数。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

模板程序给出了长方形和长方体的代码,参考这些代码,完成圆形、球、圆柱体、圆锥和正三棱柱这5种形状的计算程序。

输入输出示例

示例

输入

输出

示例1

长方形

4

8

长方形的面积为32.00

示例2

 长方体

长方体的表面积为280.00, 体积为288.00

示例3

  圆形  

88  

圆形的面积为24328.49

示例4

球  

88  

球的表面积为97313.97, 体积为2854543.24  

示例5

圆柱体  

88

88  

圆柱体的表面积为97313.97, 体积为2140907.43  

示例6

圆锥

88

88

圆锥的表面积为58734.18, 体积为713635.81

示例7

正三棱柱  

88

  88  

正三棱柱的表面积为29938.50, 体积为295086.03

 代码

# 计算几何形状的表面积和体积
import math


def type_judge(geom_type):
    """接收一个字符串为参数,根据参数判断几何体类型
    若输入为二维图形,计算其面积
    若输入为三维图形,计算其面积与体积
    根据类型调用不同的函数进行运算。
    """
    if geom_type == '长方形':
        length, width = map(float, input().split())  # 空格分隔的输入切分为列表并映射为浮点数
        return square(length, width)                 # 调用函数计算长方形面积
    elif geom_type == '长方体':
        length, width, height = map(
            float, input().split())  # 空格分隔的输入切分为列表并映射为浮点数
        return cube(length, width, height)                   # 调用函数计算长方体表面积与体积
    elif geom_type == '圆形':
        radius = float(input())  # 输入转为浮点数
        return circle(radius)    # 调用函数计算圆面积
    elif geom_type == '球':
        radius = float(input())  # 输入转为浮点数
        return sphere(radius)    # 调用函数计算球表面积与体积
    elif geom_type == '圆柱体':
        radius, height = map(float, input().split())  # 空格分隔的输入切分为列表并映射为浮点数
        return cylinder(radius, height)  # 调用函数计算圆柱体表面积与体积
    elif geom_type == '圆锥':
        radius, height = map(float, input().split())  # 空格分隔的输入切分为列表并映射为浮点数
        return cone(radius, height)  # 调用函数计算圆锥表面积与体积
    elif geom_type == '正三棱柱':
        side, height = map(float, input().split())  # 空格分隔的输入切分为列表并映射为浮点数
        return tri_prism(side, height)  # 调用函数计算正三菱住表面积与体积
    else:
        return f'未找到{geom_type}计算方法'


def square(length, width):
    """计算长方形的面积"""
    area_of_square = length * width
    return f'长方形的面积为{area_of_square:.2f}'


def cube(length, width, height):
    """计算长方体的表面积和体积"""
    area_of_cube = length * width * 2 + width * height * 2 + length * height * 2
    volume_of_cube = length * width * height
    return f'长方体的表面积为{area_of_cube:.2f}, 体积为{volume_of_cube:.2f}'


def circle(radius):
    """接收圆的半径,返回圆形的面积,圆周率用math.pi"""
    area_of_circle = math.pi*math.pow(radius, 2)
    return f'圆形的面积为{area_of_circle:.2f}'


def sphere(radius):
    """接收球的半径,返回球的表面积和体积,圆周率用math.pi"""
    area_of_sphere = 4*math.pi*math.pow(radius, 2)
    volume_of_sphere = math.pi*math.pow(radius, 3)*4/3
    return f'球的表面积为{area_of_sphere:.2f}, 体积为{volume_of_sphere:.2f}'


def cylinder(radius, height):
    """接收圆柱体的底面半径和高,返回圆柱体的表面积和体积,圆周率用math.pi"""
    area_of_cylinder = 2*math.pi*radius*(radius+height)
    volume_of_cylinder = math.pi*radius*radius*height
    return f'圆柱体的表面积为{area_of_cylinder:.2f}, 体积为{volume_of_cylinder:.2f}'


def cone(radius, height):
    """接收圆锥的底面半径和高,返回圆锥的表面积和体积,圆周率用math.pi"""
    area_of_cone = math.pi*radius * \
        (radius+math.sqrt(math.pow(radius, 2)+math.pow(height, 2)))
    volume_of_cone = math.pi*math.pow(radius, 2)*height/3
    return f'圆锥的表面积为{area_of_cone:.2f}, 体积为{volume_of_cone:.2f}'


def tri_prism(side, height):
    """接收正三棱柱的底边长和高,返回正三棱柱的表面积和体积"""
    area_of_tri_prism = math.sqrt(3)*math.pow(side, 2)/2+3*side*height
    volume_of_tri_prism = math.sqrt(3)*math.pow(side, 2)*height/4
    return f'正三棱柱的表面积为{area_of_tri_prism:.2f}, 体积为{volume_of_tri_prism:.2f}'


if __name__ == '__main__':
    type_of_geometry = input()               # 接收用户输入的字符串
    geometry = type_judge(type_of_geometry)  # 调用判断图形类型的函数
    print(geometry)                          # 输出函数运行结果