【python】习题 6-10周(上)

简介: 【python】习题 6-10周(上)

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字典知识

python字典相关知识

详解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实现字典合并

详解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

相关文章
|
3天前
|
物联网 Python
2024年Python最全信息技术导论——物联网技术习题整理(1),Python面试题库
2024年Python最全信息技术导论——物联网技术习题整理(1),Python面试题库
2024年Python最全信息技术导论——物联网技术习题整理(1),Python面试题库
|
8天前
|
存储 Python
【python】习题第10周题解
【python】习题第10周题解
|
8天前
|
Python
【python】习题 第10周
【python】习题 第10周
|
8天前
|
Python
【python】习题第9周
【python】习题第9周
|
8天前
|
数据安全/隐私保护 Python
【python】习题第8周
【python】习题第8周
|
8天前
|
Python
【python】习题第7周(下)
【python】习题第7周(下)
|
8天前
|
自然语言处理 Python
【python】习题第7周(上)
【python】习题第7周(上)
|
8天前
|
Python
【python】习题 6-10周(下)
【python】习题 6-10周(下)
|
8天前
|
自然语言处理 数据安全/隐私保护 Python
【python】习题 6-10周(中)
【python】习题 6-10周(中)
|
1天前
|
C语言 Python
专为编程小白设计的Python零基础入门教程,GitHub星标破W
市面上大多数技术类的书籍都着重于一步步的构建系统的知识体系,并不是说这样就是不对的,但这样按部就班的学习注定了需要花费大量的时间用来掌握“基础知识”,或死记硬背,或慢慢理解。 然而世界不会迁就你,而是在步步紧逼的告诉你要赶紧学完,赶紧找工作,赶紧挣钱,这才是你生活的基础。 今天给小伙伴们带来了一份《编程小白的第一步Python书》,这本书是专为零基础小白设计的,不会告诉“先学C语言,会更好理解Python”这种狗屁道理。而是先带你掌握搭建项目所用到的最少得知识,再真实的项目搭建中实践自己的所学,逐渐的完善知识体系