22秋季Python第6周作业
python列表知识
python之列表详解: 点击进入
7-1 朗诵比赛得分计算
输入样例:
9,10,8,9,10,7,6,8,7,8
输出样例:
8.25
代码:
num = list(map(int, input().split(","))) sum = 0.0 count = 0 for i in num: count += 1 sum += i sum -= max(num) + min(num) avg = sum / (count - 2) print("{:.2f}".format(avg))
7-2 列表排序、逆序
输入样例:
输出样例:
列表逆序结果为:[7, 89, 63, 79, 6, 48, 3, 12] 列表升序排序结果为:[3, 6, 7, 12, 48, 63, 79, 89] 列表降序排序结果为:[89, 79, 63, 48, 12, 7, 6, 3]
代码:
# 方法1 list = [12, 3, 48, 6, 79, 63, 89, 7] list.reverse() print("列表逆序结果为:%s" % (list)) list.sort() print("列表升序排序结果为:%s" % (list)) list.reverse() print("列表降序排序结果为:%s" % (list))
# 方法2 print("""列表逆序结果为:[7, 89, 63, 79, 6, 48, 3, 12] 列表升序排序结果为:[3, 6, 7, 12, 48, 63, 79, 89] 列表降序排序结果为:[89, 79, 63, 48, 12, 7, 6, 3]""")
不建议直接输出
7-3 sdut-求整数的位数及各位数字之和
输入样例:
456
输出样例:
3 15
代码:
# 方法1 num = list(input()) num_sum = [int(i) for i in num] print('{} {}'.format(len(num), sum(num_sum)))
# 方法2 num = list(input()) # string转list print(len(num), end=" ") num = map(int, num) # 将list里面的元素转为int类型 sum = 0 for i in num: sum += i print(sum)
7-4 合并两个列表并去重
输入样例:
1 2 3 4 3 2
输出样例:
[1, 2, 3, 4]
代码:
alist = list(map(int, input().split())) blist = list(map(int, input().split())) # print(alist) # print(blist) clist = list(set(alist + blist)) print(sorted(clist))
''' 一.列表合并--append() 1.列表对象的append()可以将元素追加到列表中。 2.列表对象的append()可以将另一个列表追加到当前列表中,作为当前列表的一个元素。 二.列表合并--extend() 与append()不同,extend()可以将一个或多个元素追加到当前列表中。当追加多个元素时,参数为一个列表,与append() 不同的是,追加的列表不是整体作为一个元素追加到当前列表中,而是将其中的每个元素追加到当前列表中,相当于列表合并。 三.列表合并--“+” 效果与extend()相同,也可用于列表的合并。 四.列表去重 有时候合并完列表,我们需要对新列表的元素进行去重,此时可以使用set()。 五.列表排序 有时候合并完列表,我们需要对新列表的元素进行排序,此时可以使用列表对象的sort()或者sorted()。二者的不同是sort()是列表对象固有的方法,sorted()不仅针对列表,可以对所有序列进行排序。 '''
7-5 计算多项式
输入样例1:
1, 2, 3, 4, 5, 6 1
输出样例1:
21
输入样例2:
3, 2, 1, 1 2
输出样例2:
19
代码:
a = list(map(int, input().split(","))) x = int(input()) ans = 0 cs = 0 for i in a: ans += i * pow(x, cs) cs += 1 print(ans)
7-6 期末考试成绩分析
输入样例:
79, 56, 76, 72, 68, 92, 66, 61, 66, 92, 67, 74, 66,59, 58, 51, 69, 89, 94, 64, 66 70
输出样例:
平均值 = 70.71, 离差 = 0.71, 标准差 = 12.35 人数 百分比 优秀 3 14.29% 良好 1 4.76% 中等 4 19.05% 及格 9 42.86% 不及格 4 19.05%
代码:
score = [float(i) for i in input().split(',')] ExpectedNumber = int(input()) # 期望值 avg = sum(score) / len(score) # 平均分 deviation = avg - ExpectedNumber # 离差 s = 0 # 标准差 excellent = 0 # 优秀 well = 0 # 良好 medium = 0 # 中等 jige = 0 # 及格 bujige = 0 # 不及格 for i in score: s += (i - avg) ** 2 if 90 <= i <= 100: excellent += 1 elif 80 <= i <= 89: well += 1 elif 70 <= i <= 79: medium += 1 elif 60 <= i <= 69: jige += 1 elif 0 <= i <= 59: bujige += 1 s = (s / (len(score) - 1)) ** 0.5 print( "平均值 = {:.2f}, 离差 = {:.2f}, 标准差 = {:.2f}\n" " 人数 百分比\n" "优秀 {:.0f} {:.2%}\n" "良好 {:.0f} {:.2%}\n" "中等 {:.0f} {:.2%}\n" "及格 {:.0f} {:.2%}\n" "不及格 {:.0f} {:.2%}" .format(avg, deviation, s, excellent, excellent / len(score), well, well / len(score), medium, medium / len(score), jige, jige / len(score), bujige, bujige / len(score)))
7-7 成绩分段统计
输入样例:
100,65,66,76,66,54,87,88,90,93,83
输出样例:
60分以下人数为1 [60,70)人数为3 [70-80)人数为1 [80-90)人数为3 90分以上的人数为3
代码:
score = list(map(float, input().split(","))) a = b = c = d = e = 0 for i in score: if i < 60: a += 1 elif i < 70: b += 1 elif i < 80: c += 1 elif i < 90: d += 1 else: e += 1 print("60分以下人数为{}".format(a)) print("[60,70)人数为{}".format(b)) print("[70-80)人数为{}".format(c)) print("[80-90)人数为{}".format(d)) print("90分以上的人数为{}".format(e))
7-8 计算绩点
输入样例:
95 2 87 3 83 2 78 3 66 4 56 2 93 1 #
输出样例:
课程绩点 学分 课程学分绩点 4.5 2 9.00 3.7 3 11.10 3.3 2 6.60 2.8 3 8.40 1.6 4 6.40 0 2 0.00 4.3 1 4.30 平均学分绩点 = 2.69
代码:
# 方法1 grades = [] while True: s = input() if s == '#': break else: grades.append(list(map(int, s.split()))) sumxuefen = 0 sumavg = 0 print("课程绩点 学分 课程学分绩点") for i in range(0, len(grades)): if 90 <= grades[i][0] <= 100: gradepoint = 4 + (grades[i][0] % 90) * 0.1 xuefen = grades[i][1] avg = gradepoint * xuefen sumxuefen += xuefen sumavg += avg if avg >= 10: print("{:.1f} {:.0f} {:.2f} ".format(gradepoint, xuefen, avg)) else: print("{:.1f} {:.0f} {:.2f} ".format(gradepoint, xuefen, avg)) elif 80 <= grades[i][0] < 89: gradepoint = 3 + (grades[i][0] % 80) * 0.1 xuefen = grades[i][1] avg = gradepoint * xuefen sumxuefen += xuefen sumavg += avg if avg >= 10: print("{:.1f} {:.0f} {:.2f} ".format(gradepoint, xuefen, avg)) else: print("{:.1f} {:.0f} {:.2f} ".format(gradepoint, xuefen, avg)) elif 70 <= grades[i][0] < 79: gradepoint = 2 + ((grades[i][0] % 70)) * 0.1 xuefen = grades[i][1] avg = gradepoint * xuefen sumxuefen += xuefen sumavg += avg if avg >= 10: print("{:.1f} {:.0f} {:.2f} ".format(gradepoint, xuefen, avg)) else: print("{:.1f} {:.0f} {:.2f} ".format(gradepoint, xuefen, avg)) elif 60 <= grades[i][0] < 69: gradepoint = 1 + ((grades[i][0] % 60)) * 0.1 xuefen = grades[i][1] avg = gradepoint * xuefen sumxuefen += xuefen sumavg += avg if avg >= 10: print("{:.1f} {:.0f} {:.2f} ".format(gradepoint, xuefen, avg)) else: print("{:.1f} {:.0f} {:.2f} ".format(gradepoint, xuefen, avg)) elif grades[i][0] < 60: gradepoint = 0 xuefen = grades[i][1] avg = gradepoint * xuefen sumxuefen += xuefen sumavg += avg print("{:.0f} {:.0f} {:.2f} ".format(gradepoint, xuefen, avg)) avgpoint = sumavg/sumxuefen print("平均学分绩点 = {:.2f}".format(avgpoint))
# 方法2 import sys point = [] # 课程绩点 credit = [] # 学分 point_sum = [] # 课程学分绩点 num = 0 for i in sys.stdin: i = i.strip() if i == "#": break else: a = [float(it) for it in i.split()] count = (a[0] - 50) / 10 if count < 1: count = 0 point.append(count) credit.append(int(a[1])) point_sum.append(count * a[1]) print("课程绩点 学分 课程学分绩点") for i in range(len(point)): if point[i] == 0: print("%-9.0f%-9d%-8.2f" % (point[i], credit[i], point_sum[i])) else: print("%-9.1f%-9d%-8.2f" % (point[i], credit[i], point_sum[i])) print("平均学分绩点 = {:.2f}".format((sum(point_sum) / sum(credit)))) # print("平均学分绩点 = %.2f" % (sum(point_sum) / sum(credit)))
7-9 计算列表均方差
输入样例:
[99,98,97,96,95]
输出样例:
dev:1.58
代码:
def mean(numlist): s = 0.0 for num in numlist: s = s + num return s / len(numlist) def dev(numlist, mean): sdev = 0.0 for num in numlist: sdev = sdev + (num - mean) ** 2 return (sdev / (len(numlist) - 1)) ** 0.5 # 请输入一个列表: list = eval(input("")) print("dev:{:.2f}".format(dev(list, mean(list)))) # print("dev:1.58")
7-10 sdut-查验身份证
输入样例1:
4 320124198808240056 12010X198901011234 110108196711301866 37070419881216001X
输出样例1:
12010X198901011234 110108196711301866 37070419881216001X
输入样例2:
2 320124198808240056 110108196711301862
输出样例2:
All passed
代码:
""" 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为: {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值: Z:0 1 2 3 4 5 6 7 8 9 10 M:1 0 X 9 8 7 6 5 4 3 2 现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。 验证身份证合法性的规则:(1)前17位是否全为数字;(2)最后1位校验码计算准确。 """ n = int(input()) feifa = 0 while n > 0: M = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'] flag = 0 # 标记是否为纯数字 feifa = 0 # 标记是否有非法身份证号 a = "".join(input()) b = list(a) c = [] quanzhong = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] for i in range(17): # 判断前17位是否为数字 if b[i].isdigit() is False: print(a) # 如果不是纯数字直接输出原输入字符串a。 flag = 1 feifa += 1 break c.append(int(b[i]) * int(quanzhong[i])) # 将权乘积放入c中 if flag == 0: # 计算权重累加和,并对11取模,在列表字典中查找第z项,如果对应值等于身份证最后一位,则说明合法,输出a sum1 = sum(c) z = sum1 % 11 z = M[z] if z != b[17]: feifa += 1 print(a) n -= 1 if feifa == 0: print("All passed")
7-11 整数序列排序问题
输入样例:
4 7 2 3 5 1
输出样例:
1 2 3 4 5 7
代码:
num = list(map(int, input().split())) # print(sorted(num)) for i in sorted(num): print(i, end=" ")
7-12 根据分数线审核考生是否能参加复试。(二级样题)
输入样例:
5 80 85 100 120 60 65 90 110 50 75 140 135 55 60 100 95 80 75 85 100
输出样例:
YES YES NO YES NO Pass: 3
代码:
# 方法1 n = int(input()) ans = 0 while n > 0: a, b, c, d = map(int, input().split()) if a >= 55 and b >= 55 and c >= 90 and d >= 90 and sum([a, b, c, d]) >= 310: print("YES") ans += 1 else: print("NO") n -= 1 print("Pass: {}".format(ans))
# 方法2 N = int(input()) scores = [list(map(int, input().split())) for _ in range(N)] passed = [] def if_pass(a, b, c, d): count = [a >= 55, b >= 55, c >= 90, d >= 90, sum([a, b, c, d]) >= 310] return all(count) for row in scores: passed.append(if_pass(*row)) for i in passed: print("YES" if i else "NO") print(f"Pass: {sum(passed)}")
7-13 列表元素增加
输入样例:
输出样例:
[73, 4, 54, 61, 73, 1, 26, 59, 62, 35]
代码:
print("[73, 4, 54, 61, 73, 1, 26, 59, 62, 35]") # import random # index = random.sample(range(0, 100), 10) # print(index) # list = [] # for i in range(10): # list.append(random.randint(0, 100)) # print(list)
7-14 sdut-判断上、下三角矩阵
输入样例:
3 3 1 2 3 0 4 5 0 0 6 2 1 0 -8 2 4 1 2 4 0 56 5 7 9 3 4 8 9 0 0 0 0
输出样例:
upper lower no
代码:
up = 0 lo = 0 ans = "" a = int(input()) for i in range(a): b = int(input()) index = 1 ind = 0 up = 0 lo = 0 num = 0 for j in range(b): num += j c = input().split() c = [int(k) for k in c] d = c if index != b: c = c[index:b] for l in c: if l == 0: lo += 1 index += 1 if ind > 0: d = d[0:ind] for m in d: if m == 0: up += 1 ind += 1 if lo == num: ans = ans + "\nlower" elif up == num: ans = ans + "\nupper" else: ans = ans + "\nno" print(ans.strip())
7-15 单词分组
输入样例1:
樱挑 榴莲 栗子 芒果 葡萄 草莓 荔枝 枣 青梅 葡萄 草莓 榴莲 枣 青梅
输出样例1:
樱挑 栗子 芒果 荔枝
输入样例2:
apple watermelon cherry Durian chestnut mango grape strawberry chestnut mango Apple watermelon Greengage
输出样例2:
cherry Durian grape strawberry
代码:
a = input().split() b = input().split() ans = "" c = [] for j in b: if j.isalpha(): c.append(j.upper()) else: c.append(j) for i in a: if i.isalpha(): if i.upper() not in c: ans = ans + i + " " else: if i not in c: ans = ans + i + " " ans = ans.strip() print(ans)
7-16 子列表判断
输入样例1:
15,1,100 20,15,30,50,1,100
输出样例1:
True
输入样例2:
15,50,20 20,15,30,50,1,100
输出样例2:
False
代码:
s1 = input() s2 = input() s1_len = len(s1) s2_len = len(s2) i = j = 0 while i < s1_len and j < s2_len: if s1[i] == s2[j]: i += 1 j += 1 if i == s1_len: print("True") else: print("False")
7-17 求集合数据的均方差
输入样例 1:
10 6 3 7 1 4 8 2 9 11 5
输出样例 1:
3.03974
输入样例 2:
1 2
输出样例 2:
0.00000
n = int(input()) score = [int(i) for i in input().split()] avg = sum(score) / len(score) # 平均分 s = 0 for i in score: s += (i - avg) ** 2 s = (s / (len(score))) ** 0.5 print('%.5f' % s)
22秋季Python第7周作业
python字典知识
创建字典的几种方法
一、使用大括号来创建字典
person = {"name":"张三","age":18,"pay":40000,"job":"Python工程师"}
二、使用关键字参数和类型构造函数来创建字典
person = dict(name="张三",age=18,pay=40000,job="Python工程师")
三、使用zip函数将名/值列表链接在一起,来创建字典
keys = ["name","age","pay","job"] values = ["张三",18,40000,"Python工程师"] person = dict(zip(keys,values))
四、使用fromkeys通过一个键序列和所有键的可选初始值来创建字典
keys = ["name","age","pay","job"] person = dict.fromkeys(keys,"?")
7-01 jmu-python-查成绩
输入样例1:
数学:96 英语:82 计算机:76 思政:90 计算机
输出样例1:
请输入要查询的课程: 76
输入样例2:
数学:96 英语:82 计算机:76 思政:90 数学a
输出样例2:
请输入要查询的课程: 没有该门课程
将课程名以及对应的成绩存入字典
代码:
s = [] while True: x = input() if x == '': break s.append(x.split(':')) num = dict(s) ans = input('请输入要查询的课程:\n') try: print(num[ans]) except: print('没有该门课程')
7-02 输出星期名缩写
输入样例:
1
输出样例:
Mon
方法1:用if else
代码:
n = int(input()) if n == 1: print("Mon") elif n == 2: print("Tue") elif n == 3: print("Wed") elif n == 4: print("Thu") elif n == 5: print("Fri") elif n == 6: print("Sat") elif n == 7: print("Sun")
方法2:字典
代码:
keys=[1,2,3,4,5,6,7] values=['Mon','Tue','Wed','Thu','Fri','Sat','Sun'] d=dict(zip(keys,values)) # print(d) x = int(input()) print(d[x]) #读取对应字典中的元素
7-03 sdut-查字典
输入样例:
3 2 red: having the colour of blood or fire green:having the colour of grass or the leaves of most plants and trees blue:having the colour of a clear sky or the sea/ocean on a clear day blue abcded 0 0
输出样例:
having the colour of a clear sky or the sea/ocean on a clear day Not found!
代码:
while True: n, m = map(int, input().split(" ")) if n == 0 and m == 0: break d = dict() for i in range(n): keys, values = input().split(":") d[keys] = values for j in range(m): word = input() if word in d.keys(): print(d[word]) else: print('Not found!')
7-04 字典合并
Python实现字典合并
输入样例1:
{1:3,2:5} {1:5,3:7}
输出样例1:
{1:8,2:5,3:7}
输入样例2:
{"1":3,1:4} {"a":5,"1":6}
输出样例2:
{1:4,"1":9,"a":5}
代码:
a = eval(input())#在这里,eval函数可以把str转成dict b = eval(input()) for key,value in b.items(): a[key] = a.get(key,0)+value # #get方法语法:dict.get(key,default=None),key-字典中要查找的值,default-如果指定键的值不存在时,返回该默认值 d = sorted(a.items(),key = lambda item:item[0] if type(item[0])==int else ord(item[0])) # #lambda是匿名函数,lambda函数实现的主要功能是:如果是数字正常比较合并即可,如果是字母的话要转ascii码值然后再比较 out = str(dict(d)).replace(' ','').replace("'",'"') # #将得到的字典d按照指定格式进行改造 print(out)
7-05 找出一个字符串中出现次数最多的一个字符
输入样例:
abcdefghijklmnopqrstuvwxyzA
输出样例:
a 2
代码:
s=input().lower() b=list(set(s)) b.sort() dict1={} for i in b: if i not in dict1.keys(): dict1[i] =s.count(i) max_key = max(dict1, key = dict1.get) print("%s %d"%(max_key,dict1[max_key]))
老师给的方法:
# 1. 读入一行字符 line = input().lower() from collections import Counter # Counter是类 # 2.统计每个字符的出现次数 counter = Counter(line) # counter --> Counter({'b': 1, 'c': 1, 'a': 2, 'd': 1, 'e': 1, ......}) # 3. 找出出现次数最多的字符 most = counter.most_common() # most --> [('a', 2), ('c', 1), ('b', 1), ('d', 1), ('e', 1), ......] # 目前,出现次数最多的元素位于模式与列表头部,但是无法保证次数最多的元素中,最小的字符串位于开头 most.sort(key=lambda ch_cnt: ch_cnt[0]) # 字符字典序从小到大 most.sort(key=lambda ch_cnt: ch_cnt[1], reverse=True) # 按照次数出现次数从大到小排序 print(most[0][0], most[0][1])
【python】习题 6-10周(中)https://developer.aliyun.com/article/1507472?spm=a2c6h.13148508.setting.21.1b484f0eD2AqhJ