python程序设计教程(第2版)习题3-习题5代码答案

习 题 3

1.从键盘接收整数的一百分制成绩(0~100),要求输出其对应的成绩等级A~E。其中,90分(包含)以上为A,80~89(均包含)分为B,70~79(均包含)分为C,60~69(均包含)分为D.60分以下为E

score=int(input())
if score>=90:
    print("A")
elif score>=80:
    print("B")
elif score>=70:
    print("C")
elif score>=60:
    print("D")
else:
print("E")

2.预设一个0~9之间的整数,让用户猜一猜并输入所猜的数。如果大于预设的数,显示“太大”,小于预设的数,显示“太小”,如此循环,直至猜中该数,显示“恭喜!你猜中了!”。

import random
digit=random.randint(0,9)
while 1:
    guess=int(input('请输入你猜想的数字'))
    if guess==digit:
        print('恭喜!你猜中了!')
        break
    if guess>digit:
        print('太大')
    else:
        print('太小')

3.某电商平台上销售不同规格包装、不同价格的水笔。编写程序,在不考虑运费的情况下,从键盘分别输入两种水笔的包装和价格,分别计算单根水笔的价格,根据价格就低原则打印输出选择购买哪种产品。

size=[]
price=[]
for i in range(2):
    size.append(int(input(f'第{i+1}种水笔的规格')))
    price.append(int(input(f'第{i+1}种水笔的价格')))
if (price[1]/size[1])>(price[0]/size[0]):
    print('选择购买第1种产品')
elif (price[1]/size[1])<(price[0]/size[0]):
    print('选择购买第2种产品')
else:
    print('两者单价一样,随意挑选')

4.输出1000以内的素数以及这些素数之和(素数,是指除了1和该数本身之外,不能被其他任何整数整除的数)。

list=[]
sum=2
for i in range(3,1001):
    for t in range(2,i):
        if i%t==0:
            break
        if i==t+1:
            list.append(i)
            break
for i in list:
    sum=i+sum
print(sum)

5.输入一个时间(小时:分钟:秒),输出该时间经过5分30秒后的时间。

date=input('时间,格式为(小时:分钟:秒)')
list1=date.split(':')
print(list1)
list1=list(map(int,list1))
if (list1[2] + 30) < 60:
    list1[2]=list1[2]+30
else:
    list1[1]=list1[1]+1
    list1[2]=list1[2]-30
if (list1[1]+5)>=60:
    list1[0]=list1[0]+1
    list1[1]=list1[1]-55
else:
    list1[1]=list1[1]+5
list_new = [str(x) for x in list1]
result=':'.join(list_new)
print(result)

6.编写程序,按公式s=1^2+ 2^2 +3^2 +n^2求累加和s不超过1000的最大项数n,程序运行结果如下所示:
1 1
2 5
3 14
4 30
5 55
6 91
7 140
8 204
9 285
10 385
11 506
12 650
13 819
14 1015
累计和不超过1000的最大项是n=13。

n=50
print('n    s')
for i in range(1,n):
    sum=0
    for t in range(1,i+1):
        sum=t**2+sum
    if sum<1000:
        print(f'{i}    {sum}')
    else:
        print(f'{i}    {sum}')
        print(f'累计和不超过1000的最大项是n={i-1}')
        break

习 题 4

1.从键盘输入一个正整数列表,以一1结束,分别计算列表中奇数和偶数的和。

ou=0
odd=0
str=input('输入一个正整数列表,每个正整数之间用,隔开,以-1结束')
list1=str.split(',')
list1=list(map(int,list1))
for i in list1:
    if i!=-1:
        if i%2==0:
            ou=i+ou
        else:
            odd=odd+i
print(f'偶数的和为{ou}')
print(f'奇数的和为{odd}')

2.已知10个学生的成绩为68、75、32、99、78、45、88、72、83、78,请将成绩存放在列表中,请对其进行统计,输出优(100~90)、良(89~80)、中(79~60)、差(59~0)4个等级的人数。

list1=[68,75,32,99,78,45,88,72,83,78]
you=liang=zhong=cha=0
for i in list1:
    if i>=90:
        you=1+you
    elif i>=80:
        liang=liang+1
    elif i>=60:
        zhong=zhong+1
    else:
        cha=cha+1
print(f'优秀的{you}人,良的{liang}人,中的{zhong}人,差的{cha}人')

3.利用while循环创建一个包含10个奇数的列表,如果输入的不是奇数要给出提示信息并能继续输入,然后计算该列表的和与平均值。

list1=[]
while 1:
    if len(list1)==10:
        break
    else:
        a=int(input('输入你想放在列表中的奇数'))
        if (a+1)%2==0:
            list1.append(a)
        else :
            print('抱歉,输入错误')
sum1=sum(list1)
print(f'list的总和为{sum1},平均值为{(sum1/10)}')

4.请用字典编程,已知某班学生的姓名和成绩如下:
姓名 成绩 姓名 成绩
张三 45 司音 90
李四 78 赵敏 78
徐来 40 张旭宁99
沙思思96 柏龙 60
如一 65 思琪 87
输出这个班的学生姓名和成绩,并求出全班同学的人数和平均分并显示。

dict={'张三':'45','李四':'78','徐来':'40','沙思思':'96','如一':'65','司音':'90','赵敏':'78','张旭宁':'99','柏龙':'60','思琪':'87'}
for i in dict.items():
    print(i)
print(len(dict))
print(sum((map(int,dict.values())))/10)

5.某家商店根据客户消费总额的不同将客户分为不同的类型。如果消费总额>10万元,为铂金卡客户(platinum);如果消费总额>5万元且<10万元,为金卡客户(gold);如果消费总额>3万元且<5万元,为银卡客户(silver);如果消费总额<3万元,为普卡客户(ordinary)。现有一批顾客的消费金额(单位:万元)分别为2.3、4.5、24、17、1、7.8、39、21、
0.5、I.2、4、1、0.3,将消费金额存储在列表listl中,输出一个字典,分别以platinum、gold、silver、ordinary为键,以各客户类型人数为值。

list1=[2.3,4.5,24,17,1,7.8,39,21,0.5,1.2,4,1,0.3]
p_platinum=p_gold=p_silver=p_ordinary=0
for i in list1:
    if i>=10:
        p_platinum+=1
    elif i>=5:
        p_gold=p_gold+1
    elif i>=3:
        p_silver=p_silver+1
    else:
        p_ordinary=p_ordinary+1
dict={
    'platinum':p_platinum,
    'gold':p_gold,
    'silver':p_silver,
    'ordinary':p_ordinary
}
print(dict)
  1. 某企业为职工发放奖金:如果入职超过5年,且销售业绩超过15000元的员工,奖金比例为0.2;销售业绩超过10000元的员工,奖金比例为0.15;销售业绩超过5000元的员工,奖金比例为0.1;其他奖金比例为0.05。如果是入职不超过5年,且销售业绩超过4000的员工,奖金比例为0.045;否则为0.01。输入入职年限、销售业绩,输出奖金比例、奖金,并将奖金存放到列表中并输出该列表。入职年限(为整数)输入一1的时候结束输入,为简化所有输入均假定正确,不需判断小于0的情况。奖金为销售业绩与奖金比例的乘积。
list1=[]
while 1:
    years = int(input('入职年限为'))
    achievement = float(input('销售业绩为'))
    if years==-1:
        break
    if years>5:
        if achievement>15000:
            ratio=0.2
        elif achievement>10000:
            ratio=0.15
        elif achievement>5000:
            ratio=0.1
        else:
            ratio=0.05
    else:
        if achievement>4000:
            ratio=0.045
        else:
            ratio=0.01
    list1.append(achievement*ratio)
    print(f'奖金比例为{ratio},奖金为{achievement*ratio}')
print(list1)

7.输入5个整数放到列表listl中,输出下标及值,然后将列表listl中大于平均值的元素组成一个新列表list2,输出平均值和列表list2.请利用列表推导式解决

list1=[]
for i in range(5):
    list1.append(int(input('整数:')))
    print(f'下标为{i}的值为{list1[i]}')
mean=sum(list1)/5
list2=[i for i in list1 if i>mean]
print(f'平均值为{mean},list2为{list2}')

8.编写程序,将由1、2、3、4这4个数字组成的每位数都不相同的所有三位数存入一个列表中并输出该列表。请利用列表推导式解决

list1=[1,2,3,4]
result=[i*100+j*10+k for i in list1 for j in list1 for k in list1 if i!=j and i!=k and j!=k]
print(result)

9.编写程序,给定列表[1,9,8,7,6,5,13,3,2,1],先输出原列表,删除其中所有奇数后再输出。请利用列表推导式解决该问题。

list1=[1,9,8,7,6,5,13,3,2,1]
print(list1)
list2=[i for i in list1 if (i+1)%2==0]
print(list2)

10.百钱买百鸡:一只公鸡5元钱,一只母钱3元钱,三只小鸡1元钱,现在用100元钱买100只鸡,问公鸡、母鸡、小鸡各多少只?请利用列表推导式解决该问题。

list1=[cock for cock in range(100) for hen in range(100-cock) if (cock*5+hen*3+(100-cock-hen)/3)==100 ]
list2=[hen for cock in range(100) for hen in range(100-cock) if (cock*5+hen*3+(100-cock-hen)/3)==100 ]
list3=[100-hen-cock for cock in range(100) for hen in range(100-cock) if (cock*5+hen*3+(100-cock-hen)/3)==100 ]
list4=[list1,list2,list3]
for i in range(len(list1)):
    print(f'公鸡{list4[0][i]}只,母鸡{list4[1][i]}只,小鸡{list4[2][i]}只')
print(list4)

习 题 5

1.输入一个字符串,将该字符串中下标为偶数的字符组成新串并通过字符串格式化方式显示。

str=input('输入一个字符串')
new_str=''
for i in range(1,len(str),2):
    new_str=new_str+str[i]
print(new_str)

2.编写程序,生成一个由15个不重复的大小写字母组成的列表。

import random
list1=[]
i=0
while i<15:
    number1=random.randint(ord('A'),ord('Z'))
    number2=random.randint(ord('a'),ord('z'))
    number3=[number1,number2]
    number=random.choice(number)
    letter=chr(number)
    if letter not in list1:
        list1.append(letter)
        i=i+1
print(f'list1为{list1}')

3.给定字符串”site sea suede sweet see kase sse ssee loses”,匹配出所有以s开头、e结尾的单词。

import re
str='site sea suede sweet see kase sse ssee loses'
new_str=''
list1=str.split(' ')
for i in list1:
    new_str=new_str+i+'  '
new_str=' '+new_str
result=re.findall(r's[a-z]*?e',new_str)
print(f'以s开头,e结尾的单词为{result}')

4.生成15个包括10个字符的随机密码,密码中的字符只能由大小写字母、数字和特殊字符“@”“$”“#”“&.”“_”“~”构成。

import random
import string
list1 = []
str = string.ascii_letters + string.digits + "@$#&_~"
while len(list1) < 15:
    result = [random.choice(str) for i in range(10)]
    print(result)
    list1.append("".join(result))
print(f'密码为:{list1}')

5.给定列表x=[“13915556234”,“13025621456”,“15325645124”,“15202362459”],检查列表中的元素是否为移动手机号码,这里移动手机号码的规则是:手机号码共11位数字;以13开头,后面跟4、5、6、7、8、9中的某一个;或者以15开头,后面跟0、1、2、8、9中的某一个。

import re
x=['13915556234','13025621456','15325645124','15202362459']
str=' '+' '.join(x)
result1=re.findall(' 13[456789]\d+',str)
result2=re.findall(' 15[01289]\d+',str)
result=result1+result2
list1=[]
for i in range(len(result)):
    tell=result[i].strip(' ')
    if len(tell)==11:
        list1.append(tell)
print(f'电话号码为{list1}')

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年3月28日
下一篇 2023年3月28日

相关推荐