《python程序设计教程》第四章常用数据结构课后习题

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

n = int(input("请输入一个正整数:"))
list3 = []
while n != -1:
    list3.append(n)
    n = int(input("请输入一个正整数:"))
else:
    print("输入结束")
print(list3)

list1 = []
list2 = []
for i in list3:
    if i % 2 != 0 :
        list1.append(i)
    else:
        list2.append(i)
print("列表1中的奇书和为:",list1,sum(list1))
print("列表中的偶数和为:",list2,sum(list2))

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

grade = int(input("请输入学生成绩:"))
list_grade = []
while grade > 0:
    list_grade.append(grade)
    grade = int(input("请输入学生成绩:"))
else:
    print("成绩输入结束,现在开始统计和输出。")
print("总成绩列表为:",list_grade)
list1=[]
list2=[]
list3=[]
list4=[]
for i in list_grade:
    if i >=90:
        list1.append(i)
    elif i>=80:
        list2.append(i)
    elif i>=60:
        list3.append(i)
    else:
        list4.append(i)
print("优:",len(list1),"良:",len(list2),"中:",len(list3),"差:",len(list4))

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

n = int(input("请输入奇数:"))
list1=[]
while len(list1) <= 10:
    if n %2 != 0:
        list1.append(n)
    else:
        print("输入错误,请重新输入。")
    n = int(input("请输入奇数:"))
print("列表的和为:",sum(list1),"列表的平均值为:",sum(list1)/len(list1),list1)

4.请用字典编程,已知某班学生的姓名和成绩如下:
在这里插入图片描述
输出这个班的学生姓名和成绩,并求出全班同学的人数和平均分显示。

name_grade = {"张三":45,"李四":78,"徐来":40,"沙思思":96,"如一":65,
              "司音":90,"赵敏":78,"张旭宁":99,"柏龙":60,"思琪":87}
list1 = list[name_grade.values()]
print(list1)
for key in name_grade.keys():
    print(key,name_grade[key])
n = len(name_grade)
avgscore = sum(name_grade.values()) / n
print("全班共有",n,"人,平均成绩为:",avgscore,"分。")

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

amount = float(input("请输入客户消费总额:"))
list_platinum = []
list_gold = []
list_silver = []
list_ordinary = []
while amount >= 0:
    if amount >= 10:
        list_platinum.append(amount)
    elif amount >= 5:
        list_gold.append(amount)
    elif amount >= 3:
        list_silver.append(amount)
    else:
        list_ordinary.append(amount)
    amount = float(input("请输入客户消费总额:"))
else:
    print("输入结束,统计数据。")
list1 = list_gold+list_silver+list_ordinary+list_platinum
amount1 = {"platinum":len(list_platinum),"gold":len(list_gold),"silver":len(list_silver),"ordinary":len(list_ordinary)}
print(amount1)

6.某企业为职工发放奖金:如果入职超过5年,且销售业绩超过15000元的员工,奖金比例为0.2;销售业绩超过10000元的员工,奖金比例为0.15;销售业绩超过5000元的员工,奖金比例为0.1;其他奖金比例为0.005.如果是入职不超过5入职不超过5年,且销售业绩超过4000的员工,奖金比例为0.045;否则为0.01。输入入职年限、销售业绩,输出奖金比例、奖金,并将奖金存放到列表中并输出该列表。入职年限(为整数)输入-1的时候结束输入,为了简化所有输入均假定正确,不需判断小于0的情况。奖金为销售业绩与奖金比例的乘积。

years = int(input("请输入入职年限为:"))
while years >= 0:
    while years >= 5:
        num = float(input("请输入销售业绩为:"))
        if num > 15000:
            coff = 0.2
        elif num > 10000:
            coff = 0.15
        elif num > 5000:
            coff = 0.1
        else:
            coff = 0.05
        award = float(coff) * num
        print("奖金为:", award)
        years = int(input("请输入入职年限为:"))
        num = float(input("请输入销售业绩为:"))
    else:
        if num <= 4000:
            coff = 0.01
        else:
            coff = 0.045
        award = float(coff) * num
        print("奖金为:", award)
        years = int(input("请输入入职年限为:"))
        num = float(input("请输入销售业绩为:"))
else:
    print("结束输入。")
  1. 输入5个整数放到列表list1中,输出下标及值,然后将列表list1中大于平均值的元素组成一个新列表list2,输出平均值和列表list2。请利用列表推导式解决该问题。
print("请输入五个整数")
list1 = []
for i in range(5):
    n = int(input("请输入第"+str(i+1)+"个:"))
    list1.append(n)
avg = sum(list1)/len(list1)
list2 = [i for i in list1 if i > avg]
print("平均值为:",avg,"list2为:",list2)

  1. 编写程序,将由1、2、3、4这4个数字组成的每位数都不相同的所有三位数存入一个列表中并输出该列表。请利用列表推导式解决该问题。
a = [1,2,3,4]
b = [i*100 + j*10 + x for i in a for j in a for x in a if i!= j and i!= x and j!= x ]
print(b)
  1. 编写程序,给定列表[1,9,8,7,6,5,13,3,2,1],先输出原列表,删除其中所有奇数后再输出。请利用列表推导式解决该问题。
a = [1,9,8,7,6,5,13,3,2,1]
b = [i for i in a if i %2 == 0]
print(b)
  1. 百钱买百鸡:一只公鸡5元钱,一只母鸡3元钱,三只小鸡1元钱,现在要用100元钱买100只鸡,问公鸡、母鸡、小鸡各多少只?请利用列表推导式解决该问题。
list1 = [(a,b,c) for a in range(0,21) for b in range(0,34) for c in range(0,34) if 5*a + 3*b + c ==100 and a + b + 3*c ==100]
print(list1)

  • 50
    点赞
  • 183
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值