安财《Python语言程序设计》程序设计题
题目如果有缺少,可以私聊我一下,我补上。补充的题目我都放在了最后。
-
在商场购买某商品时,若所花的钱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<10001000≤x<20002000≤x<3000x≥3000x=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))
-
编写计算分段函数的程序:
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,cosx−x3+3x,x>50<x≤5x≤0
输入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)
-
编写程序,实现分段函数计算,如下表所示。当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 0⩽x<5 x x x 5 ⩽ x < 10 5\leqslant x<10 5⩽x<10 3 x − 5 3x-5 3x−5 10 ⩽ x < 20 10\leqslant x<20 10⩽x<20 0.5 x − 2 0.5x-2 0.5x−2 20 ⩽ x 20\leqslant x 20⩽x 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)
-
从键盘上任意输入一个自然数,判断数是否素数。如输入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)
-
一元二次方程求解
编 程 求 解 一 元 二 次 方 程 a x 2 + b x + c = 0 , 方 程 中 的 a , b , c 系 数 从 键 盘 输 入 ( 提 示 : 分 支 嵌 套 ) 编程求解一元二次方程a x^2+b x+c=0,方程中的a,b,c系数从键盘输入(提示:分支嵌套) 编程求解一元二次方程ax2+bx+c=0,方程中的a,b,c系数从键盘输入(提示:分支嵌套)
注 解 : 注解: 注解:
大 部 分 情 况 下 是 根 据 求 根 公 式 来 求 解 , 即 : 大部分情况下是根据求根公式来求解,即: 大部分情况下是根据求根公式来求解,即:
x = − b ± b 2 − 4 a c 2 a x=\frac{-b \pm \sqrt{b^{2}-4 a c}}{2 a} x=2a−b±b2−4ac
判 别 式 : 判别式: 判别式:
利 用 一 元 二 次 方 程 的 判 别 式 ( Δ = b 2 − 4 a c ) 可 以 判 断 方 程 的 根 的 情 况 。 可 以 判 别 方 程 根 的 情 况 。 利用一元二次方程的判别式(\Delta=b^{2}-4 a c) 可以判断方程的根的情况。可以判别方程根的情况。 利用一元二次方程的判别式(Δ=b2−4ac)可以判断方程的根的情况。可以判别方程根的情况。
一 元 二 次 方 程 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("方程无解!")
-
编程产生菲波拉契数列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
-
猴子摘桃
猴子第一天摘了若干个桃子,当天吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个,到第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)
-
韩信点兵
韩信点兵的典故:韩信带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
-
编程分别计算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))
-
编程计算前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)
-
给钱问题
一个富翁试图与陌生人做一笔换钱生意,换钱规则为:陌生人每天给富翁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))
-
闰年
编写程序,运行后用户输入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')
-
小球自由落体问题
一小球从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))
-
求阶乘
从键盘输入任意一个正整数,编程计算该数的阶乘 如:输入5,阶乘结果120 。
n=eval(input("请输入一个正整数:")) p=1 for i in range(1,n+1): p=p*i print("n! =",p)
-
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()
-
百元百鸡
使用循环方法求解百钱买百鸡问题,假设公鸡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))
-
使用列表生成式方法求解百钱买百鸡问题。
假设大鸡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)
-
绘制六边形
用turtle库绘制红色线条的六边形,线条大小5像素,每边长度80。
import turtle turtle.pensize(5) turtle.pencolor("red") for i in range(6): turtle.fd(80) turtle.left(60)
输出效果:
-
绘制平行四边形
用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)
输出效果:
-
编写一个程序,接受逗号分隔的单词序列作为输入,按字母顺序排序后按逗号分隔的序列打印单词。假设向程序提供以下输入:
without,hello,bag,world
则输出为:
bag,hello,without,worldx=input("x=") l=x.split(",") l.sort() print(",".join(l))
-
编写一个程序来计算输入中单词的频率。 按字母顺序对键进行排序后输出。
假设为程序提供了以下输入:
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:1x=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]))
-
编程:输入一段英文文本,统计该文本中单词的出现次数。比如"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)
-
依次输入三个整数放在一个列表中,请把这三个数由小到大输出。
l=[] for i in range(3): x=int(input("x=")) l.append(x) l.sort() for i in l: print(i,end=" ")
-
使用给定的整数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)
-
使用列表生成式随机产生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)
-
编写一个程序,它将找到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))
-
编写一个程序,输出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))
-
编写一个程序,接收一系列单个空格分隔的单词作为输入,在删除所有重复的单词并按字母升序排序后打印这些单词。
假设向程序提供以下输入:
hello world and practice makes perfect and hello world again
则输出为:
again and hello makes perfect practice worldx=input("x=") l=x.split() s=set(l) l2=list(s) l2.sort() for i in l2: print(i,end=" ")
-
编写一个接收句子并计算字母和数字的程序。假设为程序提供了以下输入:
Hello world! 123
然后,输出应该是:
字母 10
数字 3d={'字母':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))
-
使用列表生成式来求列表中的每个奇数。 该列表由一系列逗号分隔的数字输入。
假设为程序提供了以下输入:
[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)
-
定义函数,将一个四位数的整数的每个数字分离出来,并将四位数返回。主程序要求输入整数,并输出这四个数字。
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)
-
已知字符串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))
-
编写一个函数,实现摄氏温度和华氏温度之间的换算,换算公式为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))
-
对列表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))
-
用递归方法求数列“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')
-
用函数调用的方法求:
C m n = m ! n ! × ( m − n ) ! C_{m}^{n}=\frac{m !}{n ! \times(m-n) !} Cmn=n!×(m−n)!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)
-
编写函数showMsg(n,name),它可以输出n行字符串“Happy Birthday ***",如果“***”为小明,则输出n行“Happy Birthday 小明”。
def showMsg(n,name): s="Happy Birthday" +name+"\n" print(n * s) showMsg(10,"小明")
-
编写函数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)
-
编写一个函数, 接收字符串参数(其中字符串中包含大小写字母及其他字符), 返回一个元组,元组的第一个值为大写字母的个数, 第二个值为小写字母个数。
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!'))
-
从键盘上任意输入三个数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)
-
求两个整数m,n的最大公约数,m和n由键盘输入。
m,n=eval(input("请输入两个自然数,用逗号分隔:")) r=m%n while r!=0: m=n n=r r=m%n print("最大的公约数:",n)
-
编写一个程序,该程序接受控制台以逗号分隔的数字序列,并生成包含每个数字的列表和元组。假设向程序提供以下输入:
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)
-
使用for循环依次输入三个整数放在一个列表,请把这三个数由小到大输出。
ls = [] for i in range(3): x = eval(input()) ls.append(x) ls.sort() print(ls)
-
有计算机成绩:{‘张三’: 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)
-
使用集合的差集运算,求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)
-
学校准备从2019级学生(学号:20190001~20195000)中,抽取50名学生代表学校参加某知识竞赛。编写代码实现这个功能。要求:使用集合保存这些学生的学号。
import random num = range(20190001, 20195001) nums = random.sample(num, 50) l = set(nums) print(l)
-
学生基本信息如下表所示,统计每个年龄的人数,并详细显示每个年龄的学生信息。
姓名 性别 年龄 李明 男 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)
-
下表所示是学生购物调查表。根据该表完成以下任务:
1)分别统计男生、女生每一类消费项目的总金额。
2)分别统计男女人数。结果是一个字典,键是性别,值是性别对应的人数。
3)分别统计男生、女生单类消费金额的最大值。性别 书本 文具 服饰 零食 日用品 女 10 30 300 150 600 女 200 10 300 300 100 男 200 100 1000 100 200 男 50 20 300 100 200 男 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 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')