安财《Python语言程序设计》程序设计题

安财《Python语言程序设计》程序设计题

题目如果有缺少,可以私聊我一下,我补上。补充的题目我都放在了最后。

  1. 在商场购买某商品时,若所花的钱x在下述范围内,所付钱y按对应的折扣支付:
    y = { x x < 1000 0.9 x 1000 ≤ x < 2000 0.8 x 2000 ≤ x < 3000 0.7 x x ≥ 3000 \begin{array}{l} y=\left\{\begin{array}{cc} x & x<1000 \\ 0.9 x & 1000 \leq x<2000 \\ 0.8 x & 2000 \leq x<3000 \\ 0.7 x & x \geq 3000 \end{array}\right. \end{array} y=x0.9x0.8x0.7xx<10001000x<20002000x<3000x3000

    x=eval(input("请输入所花钱x:"))
    if x>=3000:
    	y=0.7*x
    elif x>=2000:
        y=0.8*x
    elif x>=1000:
        y=0.9*x
    else:
        y=x
    print("实际应付金额{:.2f}元".format(y))
    
  2. 编写计算分段函数的程序:
    y = { sin ⁡ x + x 2 + 1 , x > 5 e x + log ⁡ 5 x + x 5 , 0 < x ≤ 5 cos ⁡ x − x 3 + 3 x , x ≤ 0 y=\left\{\begin{array}{ll} \sin x+\sqrt{x^{2}+1}, & x>5 \\ e^{x}+\log _{5}{x}+\sqrt[5]{x}, & 0<x \leq 5 \\ \cos x-x^{3}+3 x, & x \leq 0 \end{array}\right. y=sinx+x2+1 ,ex+log5x+5x ,cosxx3+3x,x>50<x5x0
    输入x的值,输出函数y的值。

    #第一种方法:
    import math
    x=eval(input("请输入x的值:"))
    if x>=5:
        y=math.sin(x)+math.sqrt(x**2+1)
    elif x>=0:
        y=math.exp(x)+math.log(x,5)+x**(1/5)
    else:
        y=math.cos(x)-x**3+3*x
    print("分段函数y的值是:",y)
    
    #第二种方法
    import math
    x=eval(input("请输入x的值:"))
    if x>5:
        y=math.sin(x)+math.sqrt(x**2+1)
    elif x>0 and x<=5:
        y=math.exp(x)+math.log(x,5)+x**(1/5)
    else:
        y=math.cos(x)-x**3+3*x
    print("分段函数y的值是:",y)
    
    #第三种方法
    import math
    x=eval(input("请输入x的值:"))
    if x>5:
        y=math.sin(x)+math.sqrt(x**2+1)
    elif 0<x<=5:
        y=math.exp(x)+math.log(x,5)+x**(1/5)
    else:
        y=math.cos(x)-x**3+3*x
    print("分段函数y的值是:",y)
    
  3. 编写程序,实现分段函数计算,如下表所示。当x=7,输出y的值。

    x x x y y y
    x < 0 x<0 x<0 0 0 0
    0 ⩽ x < 5 0\leqslant x<5 0x<5 x x x
    5 ⩽ x < 10 5\leqslant x<10 5x<10 3 x − 5 3x-5 3x5
    10 ⩽ x < 20 10\leqslant x<20 10x<20 0.5 x − 2 0.5x-2 0.5x2
    20 ⩽ x 20\leqslant x 20x 0 0 0
    x = input('Please input x:')
    x = eval(x)
    if x<0 or x>=20:
        print(0)
    elif 0<=x<5:
        print(x)
    elif 5<=x<10:
        print(3*x-5)
    elif 10<=x<20:
        print(0.5*x-2)
    
  4. 从键盘上任意输入一个自然数,判断数是否素数。如输入11,则显示:11是素数

    n=eval(input("请输入一个自然数:"))
    tag=True
    for i in range(2,n):
        if n%i==0:
            tag=False
            break
    m="是素数" if tag else "不是素数"
    print(n,m)
    
  5. 一元二次方程求解

    编 程 求 解 一 元 二 次 方 程 a x 2 + b x + c = 0 , 方 程 中 的 a , b , c 系 数 从 键 盘 输 入 ( 提 示 : 分 支 嵌 套 ) 编程求解一元二次方程a x^2+b x+c=0,方程中的a,b,c系数从键盘输入(提示:分支嵌套) ax2+bx+c=0a,b,c

    注 解 : 注解:

    大 部 分 情 况 下 是 根 据 求 根 公 式 来 求 解 , 即 : 大部分情况下是根据求根公式来求解,即:

    x = − b ± b 2 − 4 a c 2 a x=\frac{-b \pm \sqrt{b^{2}-4 a c}}{2 a} x=2ab±b24ac

    判 别 式 : 判别式:

    利 用 一 元 二 次 方 程 的 判 别 式 ( Δ = b 2 − 4 a c ) 可 以 判 断 方 程 的 根 的 情 况 。 可 以 判 别 方 程 根 的 情 况 。 利用一元二次方程的判别式(\Delta=b^{2}-4 a c) 可以判断方程的根的情况。可以判别方程根的情况。 (Δ=b24ac)

    一 元 二 次 方 程 a x 2 + b x + c = 0 ( a ≠ 0 ) 的 根 与 根 的 判 别 式 , 有 如 下 关 系 : 一元二次方程a x^2+b x+c=0(a\not=0)的根与根的判别式,有如下关系: ax2+bx+c=0(a=0)

    ( 1 ) 当 Δ > 0 时 , 方 程 有 两 个 不 相 等 的 实 数 根 ; (1)当 \Delta>0 时, 方程有两个不相等的实数根; (1)Δ>0,;
    ( 2 ) 当 Δ = 0 时 , 方 程 有 两 个 相 等 的 实 数 根 ; (2)当 \Delta=0 时, 方程有两个相等的实数根; (2)Δ=0,;
    ( 3 ) 当 Δ < 0 时 , 方 程 无 实 数 根 , 但 有 2 个 共 轭 复 根 。 (3)当 \Delta<0 时, 方程无实数根, 但有 2 个共轭复根。 (3)Δ<0,,2

    import math
    a=eval(input("A="))
    b=eval(input("B="))
    c=eval(input("C="))
    delta=b**2-4*a*c
    if a==0:
        if b==0:
            print("方程无意义!!")
        else:
            x=-c/b
            print("方程有单根:",x)
    else:
        if delta>0:
            q=math.sqrt(delta)/(2*a)
            p=-b/(2*a)
            x1=p+q
            x2=p-q
            print("两个不相等的实根",x1,x2)
        elif delta==0:
            p=-b/(2*a)
            print("两个相等的实根:",p)
        else:
            print("方程无解!")
    
  6. 编程产生菲波拉契数列20项,例如:0 1 1 2 3 5 8 13 21 ……

    #第一种方法
    x0,x1=0,1
    for n in range(0,20):
        print(x0,end=" ")
        x2=x1+x0
        x0=x1
        x1=x2
    
    #第二种方法
    x0,x1=0,1
    for n in range(0,20):
        print(x0,end=" ")
        x0,x1=x1,x0+x1
    
  7. 猴子摘桃

    猴子第一天摘了若干个桃子,当天吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个,到第10天早上想再吃时,见只剩下一个桃子,问第一天共摘了多少个桃子?

    #第一种方法
    x=1
    for d in range(0,9):
        x=(x+1)*2
    print(x)
    
    #第二种方法
    x0=1
    for d in range(0,9):
        x1=(x0+1)*2
        x0=x1
    print(x0)
    
  8. 韩信点兵

    韩信点兵的典故:韩信带1500名士兵去打仗,战死四五百人,3人一排多出2人,5人一排多出4人,7人一排多出6人,编程计算剩下
    士兵的人数。

    #第一种方法
    for i in range(1000,1101):
        if i%3==2 and i%5==4 and i%7==6:
            print('剩下士兵共有{}人'.format(i))
    
    #第二种方法
    for i in range(1100,1001,-1):
        if i%3==2 and i%5==4 and i%7==6:
            print('剩下士兵共有{}人'.format(i))
    
    #第三种方法
    i=1000
    while i<=1100:
        if i%3==2 and i%5==4 and i%7==6:
            print('剩下士兵共有{}人'.format(i))
        i=i+1
    
    #第四种方法
    i=1100
    while i>=1000:
        if i%3==2 and i%5==4 and i%7==6:
            print('剩下士兵共有{}人'.format(i))
        i=i-1
    
  9. 编程分别计算100以内(含100)奇数与偶数的和。

    s1,s2=0,0
    for i in range(1,101):
        if i%2==0:
            s2=s2+i
        else:
            s1=s1+i
    print("奇数的和是:{},偶数的和是:{}".format(s1,s2))
    
  10. 编程计算前30项的和:s=1+(1+2)+(1+2+3)+(1+2+3+4)+…+(1+2+3+4+…+n)

    t,sum=0,0
    for i in range(1,31):
        t = t + i
        sum = sum + t
    print("多项式前30项的和是:",sum)
    
  11. 给钱问题

    一个富翁试图与陌生人做一笔换钱生意,换钱规则为:陌生人每天给富翁10万元钱,直到满一个月(30天);而富翁第一天给陌生人1分钱,第2天给2分钱,第3天给4分钱,…,富翁每天给穷人的钱是前一天的两倍,直到满一个月,分别显示富翁给陌生人的钱和陌生人给富翁的钱各是多少?

    x0=0.01
    s =0
    for i in range(1,31):
        s=s+100000
        x1=2 * x0
        x0=x1
    print("富翁赚的钱{:.2f},陌生人赚的钱{:.2f}".format(s,x0))
    
  12. 闰年

    编写程序,运行后用户输入4位整数作为年份,判断其是否为闰年。如果年份能被400整除,则为闰年;如果年份能被4整除但不能被100整除也为闰年。

    x = input('Please input an integer of 4 digits meaning the year:')
    x = eval(x)
    if x%400==0 or (x%4==0 and not x%100==0):
        print('Yes')
    else:
        print('No')
    
  13. 小球自由落体问题

    一小球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

    s=100
    h0=100
    for i in range(1,10):
        h1=h0/2
        s=s+2*h1
        h0=h1
    print("小球一共经过了{:.2f}米,第10次的高度{:.2f}米".format(s,h0))
    
  14. 求阶乘

    从键盘输入任意一个正整数,编程计算该数的阶乘 如:输入5,阶乘结果120 。

    n=eval(input("请输入一个正整数:"))
    p=1
    for i in range(1,n+1):
        p=p*i
    print("n! =",p)
    
  15. 99乘法表

    输出如下格式的99乘法表。

    1 × 1 = 1 1\times1=1 1×1=1
    2 × 1 = 2 2\times1=2 2×1=2 2 × 2 = 4 2\times2=4 2×2=4
    3 × 1 = 3 3\times1=3 3×1=3 3 × 2 = 6 3\times2=6 3×2=6 3 × 3 = 9 3\times3=9 3×3=9
    4 × 1 = 4 4\times1=4 4×1=4 4 × 2 = 8 4\times2=8 4×2=8 4 × 3 = 12 4\times3=12 4×3=12 4 × 4 = 16 4\times4=16 4×4=16
    5 × 1 = 5 5\times1=5 5×1=5 5 × 2 = 10 5\times2=10 5×2=10 5 × 3 = 15 5\times3=15 5×3=15 5 × 4 = 20 5\times4=20 5×4=20 5 × 5 = 25 5\times5=25 5×5=25
    6 × 1 = 6 6\times1=6 6×1=6 6 × 2 = 12 6\times2=12 6×2=12 6 × 3 = 18 6\times3=18 6×3=18 6 × 4 = 24 6\times4=24 6×4=24 6 × 5 = 30 6\times5=30 6×5=30 6 × 6 = 36 6\times6=36 6×6=36
    7 × 1 = 7 7\times1=7 7×1=7 7 × 2 = 14 7\times2=14 7×2=14 7 × 3 = 21 7\times3=21 7×3=21 7 × 4 = 28 7\times4=28 7×4=28 7 × 5 = 35 7\times5=35 7×5=35 7 × 6 = 42 7\times6=42 7×6=42 7 × 7 = 49 7\times7=49 7×7=49
    8 × 1 = 8 8\times1=8 8×1=8 8 × 2 = 16 8\times2=16 8×2=16 8 × 3 = 24 8\times3=24 8×3=24 8 × 4 = 32 8\times4=32 8×4=32 8 × 5 = 40 8\times5=40 8×5=40 8 × 6 = 48 8\times6=48 8×6=48 8 × 7 = 56 8\times7=56 8×7=56 8 × 8 = 64 8\times8=64 8×8=64
    9 × 1 = 9 9\times1=9 9×1=9 9 × 2 = 18 9\times2=18 9×2=18 9 × 3 = 27 9\times3=27 9×3=27 9 × 4 = 36 9\times4=36 9×4=36 9 × 5 = 45 9\times5=45 9×5=45 9 × 6 = 54 9\times6=54 9×6=54 9 × 7 = 63 9\times7=63 9×7=63 9 × 8 = 72 9\times8=72 9×8=72 9 × 9 = 81 9\times9=81 9×9=81
    for i in range(1,10):
        for j in range(1,i+1):
             print("{}*{}={:2d}" .format (i,j,i*j),end=" ")
        print()
    
  16. 百元百鸡

    使用循环方法求解百钱买百鸡问题,假设公鸡5元一只,母鸡3元一只,小鸡1元一只,现在100元钱想买100只鸡,编程计算买鸡的方案,有多少种买法。

    s=0
    for x in range(1,20):                      
        for y in range(1,33):                  
            z = 100 - x - y                     
            if 5*x + 3*y + z/3 == 100:       
                print('公鸡:%d 母鸡:%d 小鸡:%d'%(x, y, z))
                s=s+1
    print('有以上{}种卖法'.format(s)) 
    
  17. 使用列表生成式方法求解百钱买百鸡问题。
    假设大鸡5元一只,中鸡3元一只,小鸡1元三只,现有100元钱想买100只鸡,有多少种买法?

    l=[(i,j,k) for i in range(0,100) for j in range(0,100) for k in range(0,100) if i+j+k==100 and 5*i+3*j+k/3==100]
    for i in l:
    	print(i)
    
  18. 绘制六边形

    用turtle库绘制红色线条的六边形,线条大小5像素,每边长度80。

    import turtle
    turtle.pensize(5)
    turtle.pencolor("red")
    for i in range(6):
        turtle.fd(80)
        turtle.left(60)
    

    输出效果:

    在这里插入图片描述

  19. 绘制平行四边形

    用turtle库绘制平行四边形,相邻两边长度分别为150和80,对角120度和60度,线条粗6像素,颜色为绿色。

    #第一种方法
    import turtle
    turtle.pensize(6)
    turtle.pencolor("green")
    turtle.fd(150)
    turtle.left(60)
    turtle.fd(80)
    turtle.left(120)
    turtle.fd(150)
    turtle.left(60)
    turtle.fd(80)
    
    #第二种方法
    import turtle
    turtle.pensize(6)
    turtle.pencolor("green")
    turtle.fd(150)
    for i in range(1,4):
    	if i%2==1:
    		turtle.left(60)
    		turtle.fd(80)
    	else:
    		turtle.left(120)
    		turtle.fd(150)
    

    输出效果:

    在这里插入图片描述

  20. 编写一个程序,接受逗号分隔的单词序列作为输入,按字母顺序排序后按逗号分隔的序列打印单词。假设向程序提供以下输入:
    without,hello,bag,world
    则输出为:
    bag,hello,without,world

    x=input("x=")       
    l=x.split(",")        
    l.sort()            
    print(",".join(l))    
    
  21. 编写一个程序来计算输入中单词的频率。 按字母顺序对键进行排序后输出。
    假设为程序提供了以下输入:
    New to Python or choosing between Python 2 and Python 3 Read Python 2 or Python 3
    然后,输出应该是:
    2:2
    3:2
    New:1
    Python:5
    Read:1
    and:1
    between:1
    choosing:1
    or:2
    to:1

    x=input("x=")                     
    l=x.split()                       
    d={}                              
    for i in l:                        
        d[i]=d.get(i,0)+1           
    l2=sorted(d)                      
    for i in l2:                       
    	print("{}:{}".format(i,d[i]))
    
  22. 编程:输入一段英文文本,统计该文本中单词的出现次数。比如"How are you.how are you"的统计结果是{“how”:2,“are”:2,“you”:2},要求用函数调用的方法实现。

    def wordnum(s):
        for c in ".,/?:":
            s=s.replace(c,' ')
        words=s.lower().split()
        dic_s={}
        for word in words:
            dic_s[word]=dic_s.get(word,0)+1
        return dic_s
        
    s=input("请输入英文文本:")
    dic_s=wordnum(s)
    print(dic_s)
    
  23. 依次输入三个整数放在一个列表中,请把这三个数由小到大输出。

    l=[]
    for i in range(3):
        x=int(input("x="))
        l.append(x)
    l.sort()
    for i in l:
        print(i,end=" ")
    
  24. 使用给定的整数n,编写一个程序生成一个包含(i, i*i)的字典,该字典包含1到n之间的整数(两者都包含)。然后程序应该打印字典。
    假设向程序提供以下输入:8
    则输出为:
    {1:1,2:4,3:9,4:16,5:25,6:36,,7:49,8:64}

    n=eval(input("n="))
    d={}
    for i in range(1,n+1):
        d[i]=i*i
    print(d)
    
  25. 使用列表生成式随机产生10个两位的正整数,存入列表ls中,输出ls中的这10个随机数,然后对这10个随机数求平均值,并输出统计高于平均值的数有多少个。

    from random import *
    ls=[randint(10,99) for i in range(10)]
    print(ls)
    pj=sum(ls)/10
    n=0
    for i in ls:
        if i>pj:
            n=n+1
    print(n)
    
  26. 编写一个程序,它将找到1000到3000之间的所有这些数字(均包括在内),这样数字的每个数字都是偶数。 获得的数字应以逗号分隔的顺序打印在一行上。

    values = [] 
    for i in range(1000, 3001): 
        s = str(i) 
        if (int(s[0])%2==0) and (int(s[1])%2==0) and (int(s[2])%2==0) and (int(s[3])%2==0): 
            values.append(s) 
    print (",".join(values)) 
    
  27. 编写一个程序,输出2000到3200(含2000和3200)之间所有是7的倍数,但不是5的倍数的整数。要求:用列表保存符合条件的整数,输出结果各整数之间用逗号分隔,并输出在一行上。

    l=[]
    for i in range(2000,3201):
        if i%7==0 and i%5!=0:
            l.append(str(i))
    print(",".join(l))
    
  28. 编写一个程序,接收一系列单个空格分隔的单词作为输入,在删除所有重复的单词并按字母升序排序后打印这些单词。
    假设向程序提供以下输入:
    hello world and practice makes perfect and hello world again
    则输出为:
    again and hello makes perfect practice world

    x=input("x=")
    l=x.split()
    s=set(l)
    l2=list(s)
    l2.sort()
    for i in l2:
    	print(i,end=" ")
    
  29. 编写一个接收句子并计算字母和数字的程序。假设为程序提供了以下输入:
    Hello world! 123
    然后,输出应该是:
    字母 10
    数字 3

    d={'字母':0,'数字':0}
    x=input("x=")
    for i in x:
        if i.isdigit():
            d['数字']=d['数字']+1
        elif i.isalpha():
            d['字母']=d['字母']+1
    for k,v in d.items():
        print("{} {}".format(k,v))
    
  30. 使用列表生成式来求列表中的每个奇数。 该列表由一系列逗号分隔的数字输入。
    假设为程序提供了以下输入:
    [1,2,3,4,5,6,7,8,9]
    然后,输出应该是:
    [1, 3, 5, 7, 9]

    l=eval(input("l="))
    l2=[i for i in l if i%2==1]
    print(l2)
    
  31. 定义函数,将一个四位数的整数的每个数字分离出来,并将四位数返回。主程序要求输入整数,并输出这四个数字。

    def fenli(n):    
        n1=int(n/1000)    
        n2=int(n/100%10)    
        n3=int(n/10%10)    
        n4=n%10    
        return (n1,n2,n3,n4)
    n=int(input("请输入一个四位数的整数:"))
    if len(str(n))!=4:    
        print("请输入一个四位数!") 
    else:    
        a,b,c,d=fenli(n)    
        print(a,b,c,d)
    
  32. 已知字符串a=“aAsmr3idd4bgs7Slsf9eAF”,要求编写程序,将字符串中的数字取出,并输出成一个新的字符串。要求用函数实现数字的提取,并返回字符串。

    def desp(s):    
        dig_s=""    
        for ch in s:      
            if ch.isdigit():           
                dig_s+=ch    
        return dig_s 
    s=input("请输入字符串:") 
    print("该字符串中的数字构成的字符串为:",desp(s))
    
  33. 编写一个函数,实现摄氏温度和华氏温度之间的换算,换算公式为F=9C/5+32,要求输入单位是摄氏度的值,能够显示相应的华氏温度值,反之亦然。

    def converse(t,n):
        if n==1:
            return 9*t/5+32
        else:
            return (t-32)*5/9
    t=eval(input("请输入温度值:"))
    n=int(input("请输入1或2,输入1表示输入的是摄氏温度,2表示华氏温度:"))
    if n==1:
        print("华氏温度值为:",converse(t,1))
    else:
        print("摄氏温度为:",converse(t,2))
    
  34. 对列表nums = [0, 7, 0, 1, 2, 1, 5, 1, 7, 8, 0, 67, 1, 3, 4]进行排序,将0放到最后。

    nums = [0, 7, 0, 1, 2, 1, 5, 1, 7, 8, 0, 67, 1, 3, 4]
    print(sorted(nums,key=lambda x:1 if x==0 else 0))
    
  35. 用递归方法求数列“1,1,1,3,5,9,17,31……”的前20项(要求每行输出5个数)

    def fun(n):    
        if n in (1,2,3):       
            return 1    
        else:       
            return fun(n-1)+fun(n-2)+fun(n-3) 
    for i in range(1,21):    
        print("{:>8}".format(fun(i)),end=' ' if i%5!=0 else '\n')
    
  36. 用函数调用的方法求:

    C m n = m ! n ! × ( m − n ) ! C_{m}^{n}=\frac{m !}{n ! \times(m-n) !} Cmn=n!×(mn)!m!

    def fac(n):  
        if n==1 or n==0:
            return 1
        else:
            return n*fac(n-1)
    m=int(input("请输入正整数m:"))
    n=int(input("请输入正整数n:"))
    if m<n:
        m,n=n,m
    else:
        f=fac(m)/(fac(n)*fac(m-n))
    print("f=",f)
    
  37. 编写函数showMsg(n,name),它可以输出n行字符串“Happy Birthday ***",如果“***”为小明,则输出n行“Happy Birthday 小明”。

    def showMsg(n,name):
        s="Happy Birthday" +name+"\n"
        print(n * s)
    showMsg(10,"小明")
    
  38. 编写函数avg(lst),参数lst是一个列表,它可以返回列表元素的整数平均值return int(sum(lst)/len(lst)),调用avg(lst)函数求每个学生的平均成绩。已知成绩列表s={‘小李’:[77,54,57],‘小张’:[89,66,78],‘小陈’:[90,93,80],‘小杨’:[69,58,93]}。 输出结果:{‘小李’:62,‘小张’:77,‘小陈’:87,‘小杨’:73}。

    def avg(lst):
        return int(sum(lst)/len(lst))
    score_dict={'小李':[77,54,57],'小张':[89,66,78],'小陈':[90,93,80],'小杨':[69,58,93]}
    avg_dict={}
    for key,value in score_dict.items():
        avg_dict[key]=avg(value)
    print(avg_dict)
    
  39. 编写一个函数, 接收字符串参数(其中字符串中包含大小写字母及其他字符), 返回一个元组,元组的第一个值为大写字母的个数, 第二个值为小写字母个数。

    def Fun(str):     #定义函数,接受一个字符串参数
        upper = lower = 0     #定义计数器
        for i in str:     #遍历字符串
            if i.isupper():     #如果为大写字母,upper的值加一
                upper += 1
            elif i.islower():     #如果为小写,lower值加一
                lower += 1
            else:
                continue     #既不是大写又不是小写,继续执行
        return upper,lower     #返回大写和小写的数值
    print(Fun('Hello World!'))
    
  40. 从键盘上任意输入三个数x,y,z,然后比较它们的大小并进行由小到大的排序输出。

    x,y,z=eval(input("输入 x,y,z,分别用逗号分隔:"))
    if  x>y:
        x,y=y,x
    if y>z:
        y,z=z,y
        if x>y:
            x,y=y,x
    print("排序后:",x,y,z)
    
  41. 求两个整数m,n的最大公约数,m和n由键盘输入。

    m,n=eval(input("请输入两个自然数,用逗号分隔:"))
    r=m%n
    while r!=0:
        m=n
        n=r
        r=m%n
    print("最大的公约数:",n)
    
  42. 编写一个程序,该程序接受控制台以逗号分隔的数字序列,并生成包含每个数字的列表和元组。假设向程序提供以下输入:
    34岁,67年,55岁,33岁,12日,98年
    则输出为:
    [‘34’, ‘67’, ‘55’, ‘33’, ‘12’, ‘98’]
    (‘34’, ‘67’, ‘55’, ‘33’, ‘12’, ‘98’)
    提示:在为问题提供输入数据的情况下,应该假设它是控制台输入,方法可以将列表转换为元组。

    import re  #导入正则表达式re模块 
    values=input('请输入数字序列:') 
    k=re.findall(r'[0-9]+',values) #findall函数将values中匹配到的数字对象导入到列表并返回,k为列表
    t=tuple(k) 
    print(k) 
    print(t) 
    
  43. 使用for循环依次输入三个整数放在一个列表,请把这三个数由小到大输出。

    ls = []
    for i in range(3):
        x = eval(input())
        ls.append(x)
    ls.sort()
    print(ls)
    
  44. 有计算机成绩:{‘张三’: 90, ‘王二’: 88,‘刘五’: 95}和数学成绩:math={‘张三’: 84, ‘李四’: 87, ‘王二’: 93,},把这两门课成绩填入总成绩表:{‘张三’: [0,0], ‘李四’:[0,0], ‘王二’: [0,0],‘刘五’:[0,0]}。总成绩表条目中的值是一个列表,分别存放了计算机和数学成绩,如果某门课没有成绩,默认为0分。

    computer = {'张三': 90, '王二': 88,'刘五': 95}
    math = {'张三': 84, '李四': 87, '王二': 93,}
    all_courses = {'张三': [0, 0], '李四': [0, 0], '王二': [0, 0],'刘五': [0, 0]}
    for name in all_courses.keys():
        if name in computer:
            all_courses[name][0] = computer[name]
        if name in math:
            all_courses[name][1] = math[name]
    print(all_courses)
    
  45. 使用集合的差集运算,求100以内的质数。

    s0 = {i for i in range(1, 101)}
    s1 = set()
    s1.add(1)
    for i in range(2, 101):
        for j in range(2, i):
            if i % j == 0:
                s1.add(i)
                break
            else:
                continue
    s = s0 - s1
    print(s) 
    
  46. 学校准备从2019级学生(学号:20190001~20195000)中,抽取50名学生代表学校参加某知识竞赛。编写代码实现这个功能。要求:使用集合保存这些学生的学号。

    import random
    num = range(20190001, 20195001)
    nums = random.sample(num, 50)
    l = set(nums)
    print(l)
    
  47. 学生基本信息如下表所示,统计每个年龄的人数,并详细显示每个年龄的学生信息。

    姓名性别年龄
    李明19
    杨柳18
    张一凡18
    许可20
    王小小19
    陈心19
    d = {'李明': ('男', 19), '杨柳': ('女', 18),'张一凡':('男', 18), '许可':('女', 20), '王小小':('女',19), \
        '陈心':('女',19)}
    ages = {}
    di = {}
    for t in d.values():
        di[t[1]] = []
    for k, v in d.items():
        ages[v[1]] = ages.get(v[1], 0) + 1
        di[v[1]].append((k, v[0]))
    for j in ages:
        print('{}岁的同学有{}位'.format(j, ages[j]))
    print('每个年龄的学生信息', di)
    
  48. 下表所示是学生购物调查表。根据该表完成以下任务:
    1)分别统计男生、女生每一类消费项目的总金额。
    2)分别统计男女人数。结果是一个字典,键是性别,值是性别对应的人数。
    3)分别统计男生、女生单类消费金额的最大值。

    性别书本文具服饰零食日用品
    1030300150600
    20010300300100
    2001001000100200
    5020300100200
    20050400100200
    10010500150800
    200100500300200
    3005001050
    1001050040500
    20050200100100
    ls = [{'性别':'女','书本':10,'文具':30,'服饰':300,'零食':150,'日用品':600},
           {'性别':'女','书本':200,'文具':10,'服饰':300,'零食':300,'日用品':100},
           {'性别':'男','书本':200,'文具':100,'服饰':1000,'零食':100,'日用品':200},
           {'性别':'男','书本':50,'文具':20,'服饰':300,'零食':150,'日用品':600},
           {'性别':'男','书本':200,'文具':50,'服饰':400,'零食':100,'日用品':200},
           {'性别':'女','书本':100,'文具':10,'服饰':500,'零食':150,'日用品':800},
           {'性别':'女','书本':200,'文具':100,'服饰':500,'零食':300,'日用品':200},
           {'性别':'男','书本':300,'文具':50,'服饰':0,'零食':10,'日用品':50},
           {'性别':'男','书本':100,'文具':10,'服饰':500,'零食':40,'日用品':500},
           {'性别':'男','书本':200,'文具':50,'服饰':200,'零食':100,'日用品':100}]
    
    # 1)分别统计男生、女生每一类消费项目的总金额。
    male_buy = {}
    female_buy = {}
    for dic in ls:
        for k,v in dic.items():
            if k != '性别':
                if dic['性别'] == '男':
                    male_buy[k] = male_buy.get(k,0) + v
                else:
                    female_buy[k] = female_buy.get(k,0) + v
    print('男生、女生每一类消费项目的消费总金额如下所示:')
    print('  ', end = '\t')
    for key in male_buy.keys():
        if key != '性别':
            print(key, end = '\t')
    print()
    print('男生', end = '\t')
    for value in male_buy.values():
        if key != '性别':
            print(value, end = '\t')
    print()
    print('女生', end = '\t')
    for value in female_buy.values():
        if key != '性别':
            print(value, end = '\t')
    print()
    
    # 2)分别统计男女人数。结果是一个字典,键是性别,值是性别对应的人数。
    d_num = {}
    d_num['男'] = 0
    d_num['女'] = 0
    for dic in ls:
        if dic['性别'] == '男':
            d_num['男'] += 1
        if dic['性别'] == '女':
            d_num['女'] += 1
    print(d_num)
    
    # 3)分别统计男生、女生单类消费金额的最大值。
    l = []
    d1 = {}
    d2 = {}
    for key in ls[0].keys():
        if key != '性别':
               l.append(key)
    for i in l:
        d1[i] = []
        d2[i] = []
    for d in ls:
        if d['性别'] == '男':
            for j in l:
                d1[j].append(d[j])
        if d['性别'] == '女':
            for k in l:
                d2[k].append(d[k])
    print('男生、女生单类消费金额的最大值如下所示:')
    print('  ', end = '\t')
    for i in l:
        print(i, end = '\t')
    print()
    print('男生', end = '\t')
    for i in l:
        print(max(d1[i]), end = '\t')
    print()
    print('女生', end = '\t')
    for i in l:
        print(max(d2[i]), end = '\t')
    

  • 49
    点赞
  • 119
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花花老爷子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值