【python】习题 6-10周

8 篇文章 14 订阅

【python】习题 2

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实现字典合并的四种方法

更多内容:技巧 | 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])

7-06 Dictionary

在这里插入图片描述
输入样例:
在这里给出一组输入。例如:

2
like love
love like
2
like
love
3
beauty pure
king queen
season summer
3
base
king
season

输出样例:
在这里给出相应的输出。例如:

love
like
base
queen
summer

代码:

dict1 = {}
while True:
    try:
        n = int(input())
        for i in range(n):
            s = input().split()
            dict1[s[0]] = s[1]

        m = int(input())
        for j in range(m):
            t = input()
            if t in dict1.keys():
                print(dict1[t])
            else:
                print(t)
    except:
        break

7-07 通过两个列表构建字典

在这里插入图片描述
输入样例:

学校 城市 邮编
集美大学 厦门 361021

输出样例:

[('城市', '厦门'), ('学校', '集美大学'), ('邮编', '361021')]

代码:

# str1 = input().split()
# str2 = input().split()
# dirs = dict(zip(str1, str2))
# ans = list(dirs.items())
# ans.sort()
# print(ans)

keys = list(input().split())
values = list(input().split())
dict1 = dict(zip(keys, values))

ans = sorted(dict1.items())
print(ans)

7-08 两数之和

在这里插入图片描述
输入样例1:
在这里给出一组输入。例如:

2,7,11,15
9

输出样例1:
在这里给出相应的输出。例如:

0 1

输入样例2:
在这里给出一组输入。例如:

3,6,9
10

输出样例2:
在这里给出相应的输出。例如:

no answer

代码:

line = list(map(int, input().split(",")))
num = int(input())
flag = 0
for i in range(len(line) - 2):
    for j in range(i + 1, len(line) - 2):
        if num == line[i] + line[j]:
            flag = 1
            print("%d %d" % (i, j))
            break
    if flag == 1:
        break
if flag == 0:
    print("no answer")

7-10 词典

在这里插入图片描述
输入样例:

5 3
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay
atcay
ittenkay
oopslay

输出样例:

cat
eh
loops

代码:

dict1 = {}
n, m = map(int, input().split())
# N行字典条目
for i in range(n):
    d = input().split()
    dict1.update({d[1]: d[0]})
# M行要翻译的外语单词
for i in range(m):
    a = input()
    if a in dict1:
        print(dict1[a])
    else:
        print("eh")

7-10 图的字典表示

在这里插入图片描述
输入样例:
在这里给出一组输入。例如:

4
{'a':{'b':10,'c':6}}
{'b':{'c':2,'d':7}}
{'c':{'d':10}}
{'d':{}} 

输出样例:
在这里给出相应的输出。例如:

4 5 35

代码:
方法一

n = int(input())
num = 0
sum = 0
for i in range(n):
    dic = eval(input())
    # eval函数在这里就是说明dic接收的是一个字典
    # print(dic)
    for j in dic:
        temp = dic[j]
        for key in temp:
            # 计算边数和边总长度
            num += 1
            sum += temp[key]
print(n, num, sum)

方法二

import ast

a = set()  # 顶点数
s = []  # 边数
sum = 0
n = int(input())
dict1 = {}
for i in range(n):
    d1 = input()
    dict2 = ast.literal_eval(d1)
    for key, value in dict2.items():
        a.add(key)
        if type(value) == dict:
            for key1, value1 in value.items():
                a.add(key1)
                s.append(key1)
                sum += value1
print(len(a), len(s), sum)

7-11 电话聊天狂人

在这里插入图片描述
输入样例:

4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832

输出样例:

13588625832 3

代码:

dict1 = {}
a = []
n = int(input())
for i in range(n):
    line = input().split()
    if line[0] not in dict1:
        dict1[line[0]] = 1
    elif line[0] in dict1:
        dict1[line[0]] += 1

    if line[1] not in dict1:
        dict1[line[1]] = 1
    elif line[1] in dict1:
        dict1[line[1]] += 1
        
m = max(dict1.values())
for key, value in dict1.items():
    if value == m:
        a.append(key)
if len(a) == 1:
    print(min(a), m)
else:
    print(min(a), m, len(a))

对比别人写的代码:

n=int(input())
call={}
while n:
    lst=list(map(int,input().split()))
    n-=1
    for i in lst:
        if i not in call:
            call[i]=1
        else:
            call[i]+=1
cnt,frq=1,0
rst=[]
for k in sorted(call.items(),key=lambda call:call[1],reverse=True):
    if frq==0:
        min_num=k[0]        
        frq=k[1]
    if k[1]==frq:
        rst.append(k)
        if min_num>k[0]:
            min_num=k[0]
    else:
        break
if len(rst)==1:
    print(min_num,frq)
else:
    print(min_num,frq,len(rst))
# sample小数据,狂人唯一
# 小数据,多个狂人并列
# 最大n,随机

7-12 求整数序列中出现次数最多的数

在这里插入图片描述
输入样例:

10 3 2 -1 5 3 4 3 0 3 2

输出样例:

3 4

代码:
方法一

s = input().split()
num = list(set(s[1:]))
num.sort()
dict1 = {}
for i in num:
    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]))

方法二

a = input().split() #在一行中输入多个数
i = int(a[0]) + 1   #确定第一个数字大小即是列表应有的长度
del a[i:]			#删除多余输入的数字
del a[0]			#删除第一个数字
                    #现在a中存储的即为要求序列

ans = 0
count = 0
for i in a:         #从第一个数字开始遍历(第一个循环)
    num = 0
    for j in a:		#从第一个数字开始遍历(第二个循环)
        if j == i:  #如果两个数字相等,那么这个数字的数量加一
            num += 1
    if count < num:	#判断数量最多的数字并存储
        count = num
        ans = i
print(ans, end = ' ')
print(count)

7-13 jmu-Java&Python-统计文字中的单词数量并按出现次数排序

在这里插入图片描述
输入样例1

failure is probably the fortification in your pole

it is like a peek your wallet as the thief when you
are thinking how to spend several hard-won lepta
          
when you are wondering whether new money it has laid
background because of you then at the heart of the
     
most lax alert and most low awareness and left it

godsend failed
!!!!!

输出样例1

46
the=4
it=3
you=3
and=2
are=2
is=2
most=2
of=2
when=2
your=2

输入样例2

Failure is probably The fortification in your pole!

It is like a peek your wallet as the thief when You
are thinking how to. spend several hard-won lepta.

when yoU are? wondering whether new money it has laid
background Because of: yOu?, then at the heart of the
Tom say: Who is the best? No one dare to say yes.
most lax alert and! most low awareness and* left it

godsend failed
!!!!!

输出样例2

54
the=5
is=3
it=3
you=3
and=2
are=2
most=2
of=2
say=2
to=2

代码:
(这题的try except有点多余,我没改)

import ast
t=""
dict1={}
sum=0
while True:
    try:
        t=input()
        if t=="!!!!!":
            break
        t = str(t).replace('!',' ').replace(".",' ').replace(",",' ').replace(":",' ').replace("*",' ').replace("?",' ')
        t=t.split(" ")
    except:
        pass
    for i in t:
        if i.lower() in dict1 :
            dict1[i.lower()] += 1

        elif i.lower() not in dict1 and i!="":
            dict1[i.lower()] = 1
dict1 = list(dict1.items())
dict1.sort(key=lambda dict1 : dict1[0])
dict1.sort(key=lambda dict1 : dict1[1],reverse=True)

print(len(dict1))

dict1=dict1[0:10]
for key2 ,values2 in dict1:
    print("%s=%s"%(key2,values2))

看看别人写的代码,学习一下更好的方法。

本题需要注意的要点:
需要对字符串的这些 ! . , : * ? 标点符号进行处理,需要用到字符串自带的replace()函数.
在处理字典的键值对的问题的时候,我们往往需要结合元组和列表的相关操作来进行。
使用sorted()函数对元素是元组的列表进行排序的时候,排序的参考变量只会是每个元组中的第一个元素。以及sorted()默认升序排列,要求降序的话,需要加上reverse=True。
zip()函数能灵活按 (键:值) 或者 (值:键) 的循序来整合处理字典,方便分别依照键或依照值为标准来进行排序。
本题最大的难点在于需要进行二次排序:
需要优先进行按值排序后,还要对值相同的切片进行按键排序,其中出现了控制切片排序的方法。
在更新切片序列的时候,别忘记要带上当前的元组所包含的值!
由于切片融入新列表的触发条件是值发生改变,而最后一块值的切片无法在循环中融入新列表,所以需要在循环外额外加入!

1

# 处理多个空格间隔的函数:
def HandleBlock(list):
    new_list = []
    for item in list:
        if item != "":
            new_list.append(item)
    return new_list
removechars = "!.,:*?"
total_list = []
line = ""
while line != "!!!!!":
    line = input()
    if len(line) == 0:
        pass
    elif line != "!!!!!":
        # 去除 "!.,:*?"
        for char in removechars:
            line = line.replace(char, ' ')
        # 去除空格及做列表拆分
        line = line.split(" ")
        line = HandleBlock(line)
        # 统一以小写状态输入
        for item in line:
            total_list.append(item.lower())
    else:
        pass
# 登记出现的个数
# 初始化统计表
statistical_table = {}
for item in total_list:
    statistical_table[item] = 0
# 统计
for item in total_list:
    statistical_table[item] += 1
# 第一层按次数排序
temp_table = list(zip(statistical_table.values(), statistical_table.keys()))
ordered_table = sorted(temp_table, reverse=True)
# 第二层次数相同按键的字母序排序
final_ordered_table = []
cut_list = []
cur_times = ordered_table[0][0]
for item in ordered_table:
    if item[0] == cur_times:
        cut_list.append((item[1], item[0]))
    else:
        ordered_cut_list = sorted(cut_list)
        final_ordered_table += ordered_cut_list
        # 更新当前的值
        cur_times = item[0]
        cut_list = []
        cut_list.append((item[1], item[0]))
ordered_cut_list = sorted(cut_list)
final_ordered_table += ordered_cut_list
# 输出
numb = len(final_ordered_table)
print(numb)
for i in range(10):
    print(f"{final_ordered_table[i][0]}={final_ordered_table[i][1]}")

2

from functools import cmp_to_key


def cmpkey2(x, y):
    if x[1] > y[1]:
        return 1
    elif x[1] < y[1]:
        return -1
    elif x[0] > y[0]:
        return -1
    elif x[0] < y[0]:
        return 1
    return 0


text = ""
while True:
    s = input()
    if s == '!!!!!':
        break
    text += ' '
    text += s
text = text.lower()
for ch in '!.,:*?':
    text = text.replace(ch, ' ')
cnt = {}
for word in text.split():
    cnt[word] = cnt.get(word, 0) + 1
items = list(cnt.items())
items.sort(key=cmp_to_key(cmpkey2), reverse=True)
print(len(items))
for i in range(10):
    if i >= len(items):
        break
    key, val = items[i]
    print("{}={}".format(key, val))

7-14 jmu-Java&Python-统计一段文字中的单词个数并按单词的字母顺序排序后输出

在这里插入图片描述
输入样例

Failure is probably the fortification in your pole
It is like a peek your wallet as the thief when you
are thinking how to spend several hard-won lepta
when you Are wondering whether new money it has laid
background Because of you, then at the heart of the
most lax alert and most low awareness and left it
godsend failed
!!!!!

输出样例

49
Are
Because
Failure
It
a
alert
and
are
as
at

代码:

t = ""
dict1 = {}
sum = 0
while True:
    t = input()
    if t == "!!!!!":
        break
    t = t.split(" ")
    for i in t:
        if i in dict1:
            dict1[i] += 1
        elif i not in dict1 and i != "":
            dict1[i] = 1
dict1 = list(dict1.items())
dict1.sort(key=lambda dict1: dict1[0])
print(len(dict1))

dict1 = dict1[0:10]
for key2, values2 in dict1:
    print(key2)

7-15 查单词所在页码

在这里插入图片描述
输入样例:

4
cungneh
19
wyd
17
aqkj
2
olckomm
15
4
wyd
aqkj
cungneh
olckomm

输出样例:

17
2
19
15

代码:
方法1

N = int(input())
dict1 = {}
for i in range(N):
    danci = input()
    num = input()
    dict1[danci] = num
M = int(input())
for i in range(M):
    x = input()
    print(dict1[x])

方法2

n=int(input())
p=[]
for i in range(n):
    m=input().split()
    s=input().split()
    m.extend(s)
    p.append(m)
x=int(input())
for j in range(x):
    l=input()
    for k in range(len(p)):
        if p[k][0]==l:
            print(p[k][1])

22秋季Python第8周作业(函数)

函数题

6-1 jmu-python-函数-圆形生成器

在这里插入图片描述
函数接口定义:

getCircleArea(r) #r代表整数半径
get_rList(n) #n代表在函数中输入n个值放入列表。

裁判测试程序样例:

/* 请在这里填写答案 */
n = int(input())
rList = get_rList(n)
for e in rList:
    print('{:10.3f}'.format(getCircleArea(e)))
print(type(rList))``

输入样例:

3
1
2
3

输出样例:

     3.142
    12.566
    28.274
<class 'list'>

代码:

import math

# 功能:可对指定r计算圆面积。
def getCircleArea(r):
    return math.pi * r * r

# 功能:输入n个值放入列表并将列表return。
def get_rList(n):
    list1 = []
    for i in range(n):
        x = eval(input())
        list1.append(x)
    return list1

6-2 jmu-python-判断质数

本题要求实现一个函数,判断参数是否是质数,是的话返回True,否则返回False
注意:函数中要有异常处理,如果参数不是整数,返回False

函数接口定义:

def isPrime(num)

裁判测试程序样例:

/* 请在这里填写答案 */
num=input()
if isPrime(num):
    print('yes')
else:
    print('no')

输入样例1:

ab

输出样例1:

no

输入样例2:

1.1

输出样例2:

no

输入样例3:

11

输出样例3:

yes

代码:

def isPrime(num):
    try:
        num = int(num)
    except:
        return False
    
    if num <= 1:
        return False
    else:
        for i in range(2, int(pow(num, 0.5)) + 1):
            if num % i == 0:
                return False
                break
        return True

6-3 jmu-python-函数-找钱

在这里插入图片描述
函数接口定义:

giveChange(money) #money为要找的钱。经过计算,应按格式"要找的钱 = x*10 + y*5 + z*1"输出。

裁判测试程序样例:

/* 请在这里填写答案 */
n =  int(input())
for i in range(n):
    giveChange(int(input()))

输入样例:

5
109
17
10
3
0

输出样例:

109 = 10*10 + 1*5 + 4*1
17 = 1*10 + 1*5 + 2*1
10 = 1*10 + 0*5 + 0*1
3 = 0*10 + 0*5 + 3*1
0 = 0*10 + 0*5 + 0*1

代码:

def giveChange(money):  # money为要找的钱。经过计算,应按格式"要找的钱 = x*10 + y*5 + z*1"输出。
    x = money // 10
    y = (money - (x * 10)) // 5
    z = money - (x * 10) - (y * 5)
    print('{} = {}*10 + {}*5 + {}*1'.format(money, x, y, z))

6-4 使用函数求素数和

在这里插入图片描述
函数接口定义:

prime(p),返回True表示p是素数,返回False表示p不是素数
PrimeSum(m,n),函数返回素数和

裁判测试程序样例:

/* 请在这里填写答案 */

m,n=input().split()
m=int(m)
n=int(n)
print(PrimeSum(m,n))

输入样例:

1 10

输出样例:

17

代码:

def Prime(num):
    try:
        num = int(num)
    except:
        return False
    
    if num <= 1:
        return False
    else:
        for i in range(2, int(pow(num, 0.5)) + 1):
            if num % i == 0:
                return False
                break
        return True

def PrimeSum(m,n):
    sum = 0
    for num in range(m,n+1):
        if Prime(num):
            sum += num;
    return sum

6-5 使用函数统计指定数字的个数

在这里插入图片描述
函数接口定义:

在这里描述函数接口。例如:
CountDigit(number,digit ),返回digit出现的次数

裁判测试程序样例:

/* 请在这里填写答案 */

number,digit=input().split()
number=int(number)
digit=int(digit)
count=CountDigit(number,digit )
print("Number of digit 2 in "+str(number)+":",count)

输入样例:
在这里给出一组输入。例如:

-21252 2

输出样例:
在这里给出相应的输出。例如:

Number of digit 2 in -21252: 3

代码:

def CountDigit(number, digit):
    ans = 0
    if number < 0:
        number = abs(number)
    x = 0
    while number > 0:
        x = number % 10
        if digit == x:
            ans += 1
        number = number // 10
    return ans

6-6 使用函数输出指定范围内Fibonacci数的个数

在这里插入图片描述
函数接口定义:

在这里描述函数接口。例如:
fib(n),返回fib(n)的值
PrintFN(m,n),用列表返回[m, n]中的所有Fibonacci数。

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:
/* 请在这里填写答案 */

m,n,i=input().split()
n=int(n)
m=int(m)
i=int(i)
b=fib(i)
print("fib({0}) = {1}".format(i,b))
fiblist=PrintFN(m,n)
print(len(fiblist))

输入样例:
在这里给出一组输入。例如:

20 100 6

输出样例:
在这里给出相应的输出。例如:

fib(6) = 13
4

代码:

def fib(n):  # 返回fib(n)的值
    if n == 0 or n == 1:
        return 1
    else:
        return fib(n - 1) + fib(n - 2)


def PrintFN(m, n):  # 用列表返回[m, n]中的所有Fibonacci数。
    list1 = []
    for num in range(25):
        if m <= fib(num) <= n:
            list1.append(fib(num))
    return list1

6-7 缩写词

在这里插入图片描述
函数接口定义:

acronym(phrase);
phrase是短语参数,返回短语的缩写词

裁判测试程序样例:

/* 请在这里填写答案 */
phrase=input()
print(acronym(phrase))

输入样例:

central  processing  unit

输出样例:

CPU

代码:

def acronym(phrase):
    data = phrase.split()
    # print(data)
    # ['central', 'processing', 'unit']
    ans = ''
    for i in range(len(data)):
        ans += data[i][0].upper()  # upper 小写变大写
    return ans

6-8 jmu-python-发牌

在这里插入图片描述
裁判测试程序样例:

import random

/* 请在这里填写答案 */

suit=['♥','♠','♦','♣']
d=['A','2','3','4','5','6','7','8','9','10','J','Q','K']
n=int(input())
random.seed(n)
poker=create()
poker=shufflecard(poker)
for i in range(52):
    print('%-4s'%poker[i],end='  ')
    if i%13==12:
        print()
for i in range(1,5):
    deal(poker,i)

输入样例:

7

输出样例:

5    ♣A    ♦6    ♥J    ♣2    ♥Q    ♥A    ♠72    ♣Q    ♠49    ♦K    
♣687    ♠Q    ♦410   ♥K    ♠9553    ♣J    ♣K    
♥8106102    ♦J    ♣438    ♦A    ♦263    
♠A    ♦79    ♦Q    ♠J    ♥79543    ♠K    ♥1081个玩家拿到的牌是:♠5,2,2,♦K,♠Q
第2个玩家拿到的牌是:♣A,♥Q,♣Q,6,43个玩家拿到的牌是:♦6,♥A,4,8,104个玩家拿到的牌是:♥J,7,9,7,♥K

代码:

def create():
    global suit
    global d
    list1 = []
    for su in suit:
        for itd in d:
            list1.append(str(su + itd))
    return list1


def shufflecard(poker):
    random.shuffle(poker)
    return poker


def deal(poker, i):
    print("第{}个玩家拿到的牌是:".format(i), end='')
    temp = i
    for it in range(1, 6):
        if it <= 4:
            print('%s' % poker[temp - 1], end=',')
        else:
            print('%s' % poker[temp - 1], end='\n')
        temp += 4

编程题

7-1 哥德巴赫猜想

在这里插入图片描述
输入样例:

24

输出样例:

24 = 5 + 19

代码:

def isPrime(num):
    try:
        num = int(num)
    except:
        return False

    if num <= 1:
        return False
    else:
        for i in range(2, int(pow(num, 0.5)) + 1):
            if num % i == 0:
                return False
                break
        return True


n = int(input())
for i in range(2, n):
    if isPrime(i) and isPrime(n - i):
        break
print("{} = {} + {}".format(n, i, n - i))

7-2 数字金字塔

在这里插入图片描述
代码:

print("""    1 
   2 2 
  3 3 3 
 4 4 4 4 
5 5 5 5 5 """)

7-3 jmu-python-凯撒密码加密算法

在这里插入图片描述
输入样例:
在这里给出一组输入。例如:

Hello World!
3

输出样例:
在这里给出相应的输出。例如:

Khoor Zruog!

代码:

text = input()
k = int(input())
ans = ''
for i in text:
    if i.isalpha():
        x = ord(i)+k
        if chr(x).isalpha():
            ans += chr(x)
        else:
            ans += chr(x-26)
    else:
        ans += i
print(ans)

7-4 最小公倍数

在这里插入图片描述
输入样例:

1 3
15 20

输出样例:

3
60

代码:

import math

while True:
    try:
        a, b = map(int, input().split())
        # print("{:} {:}".format(math.gcd(a, b), int(a * b / math.gcd(a, b))))
        print("{:}".format(int(a * b / math.gcd(a, b))))
    except:
        break

7-5 特立独行的幸福

在这里插入图片描述
输入样例 1:

10 40

输出样例 1:

19 8
23 6
28 3
31 4
32 3

注意:样例中,10、13 也都是幸福数,但它们分别依附于其他数字(如 23、31
等等),所以不输出。其它数字虽然其实也依附于其它幸福数,但因为那些数字不在给定区间 [10, 40]
内,所以它们在给定区间内是特立独行的幸福数。

输入样例 2:

110 120

输出样例 2:

SAD

代码:

l,r=input().split()
l,r=int(l),int(r)
list,ans,child=[],[],{} #list存所有的幸福树;ans存独立的幸福树,即不依赖于区间内的其他数字;child存区间内依赖该幸福数(key)的幸福数的个数(value)
for num in range(l,r+1):#枚举区间所有数字
    sum = 0
    tnum = num
    vis={}
    while sum!=1 or vis[sum]<2:
        sum = 0
        for digit in str(tnum):#对一个十进制的各位数字做一次平方和
            sum += int(digit)**2
        vis.setdefault(sum,0)#字典初始化
        vis[sum]+=1 #一次迭代结束 该数字在迭代过程中出现次数+1 
        if(vis[sum]==2):#该数字在迭代过程中出现次数==2 即首次出现死循环 当前枚举的数字num是不幸福数
            break
        tnum = sum
    if(sum==1):#数字num是幸福数 若干次迭代结束时平方和sum==1
        ans.append(num)#存进幸福数数组
        tnum = num
        sum = 0
        child.setdefault(num,0) #计算这个幸福数的独立性 即数依赖于这个数num的幸福数的个数
        while(sum!=1):
            sum = 0
            for digit in str(tnum):
                sum += int(digit) ** 2
            list.append(sum) #对幸福数迭代 迭代过程中出现的数都是幸福数 全部加进list中 但对num进行迭代 幸福数num本身没有进入list,即如果一个幸福数是独立的,在有限区间[l,r]内不依附于其他数字,则不会出现在list中
            tnum = sum
            child[num]+=1 #依赖于幸福数num的幸福数的个数+1 
        #一个幸福数num的child值为num迭代到1的过程中产生的全部sum值的个数 因为迭代到1就结束循环 过程显然是没有产生重复sum值的

import math

def isPrime(n):
    if n <= 1:
        return False
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True

for item in ans:
    if item not in list:#出现在list中的幸福数都是其他幸福数迭代过程中产生的
        if isPrime(item):
            child[item]*=2
        print(item,child[item])

if(len(ans)==0):
    print("SAD")

7-6 用函数求两个整数的最大公约数和最小公倍数

在这里插入图片描述
输入样例:

24 36
-48 128

输出样例:

12 72
16 -384

提示(公约数、公倍数)
提示:a,b里有负的则最小公倍数就为负的

注意要判断正负

代码:
方法1

import math
import sys

# while True:
#     line = sys.stdin.readline()  # 一次只读一行
for line in sys.stdin:
    line = line.strip()
    x = line.split()
    if line == '\n':
        break
    a = int(x[0])
    b = int(x[1])
    # print("{:} {:}".format(math.gcd(a, b), int(a * b / math.gcd(a, b))))
    if a < 0 or b < 0:
        a = abs(a)
        b = abs(b)
        print("{} {}".format(math.gcd(a, b), -int(a * b / math.gcd(a, b))))
    else:
        print("{} {}".format(math.gcd(a, b), int(a * b / math.gcd(a, b))))
        

方法2

import sys


def gys(a, b):
    for i in range(min(a, b), 0, -1):
        if a % i == 0 and b % i == 0:
            return i


def gbs(a, b):
    for i in range(min(a, b), 0, -1):
        if a % i == 0 and b % i == 0:
            return a * b // i


for i in sys.stdin:
    a, b = list(map(int, i.split()))
    if a < 0 or b < 0:
        a = abs(a)
        b = abs(b)
        print("{} {}".format(gys(a, b), -gbs(a, b)))
    else:
        print("{} {}".format(gys(a, b), gbs(a, b)))

22秋季Python第9周作业

函数题

6-1 完数统计

完数定义:一个数的所有因子(包括1)之和等于它自身,这个数就是完数。比如6=1+2+3,6是完数。
本题要求编写程序,计算所有N位完数的个数与列表显示。

函数接口定义:

def wan(n):

在这里解释接口参数。n是一个大于0的正整数。表示几位数。

裁判测试程序样例:

import math

/* 请在这里填写答案 */

n=int(input())
x,lst=wan(n)
print(x)
print(lst)

输入样例:
在这里给出一组输入。例如:

2

输出样例:
在这里给出相应的输出。例如:

1
[28]

代码:

def wan(n):
    arr = []
    count = 0
    for x in range(int(math.pow(10, n - 1)), int(math.pow(10, n))):
        sum = 1
        for i in range(2, x):
            if x % i == 0:
                sum += i
        if sum == x:
            arr.append(sum)
            count += 1
    return count, arr

6-2 偶数是两个素数的和

编写函数,接收一个正偶数为参数,输出两个素数,并且这两个素数之和等于原来的正偶数。如果存在多组符合条件的素数,则全部输出。

函数接口定义:
在这里描述函数接口。例如:

def  evenprimesum( n ):

在这里解释接口参数。n 为传递的整数,不一它是偶数,也不一定是大于0的数据。函数将所有是偶数的素数输出,输出格式为:素数 + 素数 = 偶数,数据之间分隔符为一个空格

裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如:

/* 请在这里填写答案 */

n = int(input())
evenprimesum(n)

输入样例:
在这里给出一组输入。例如:

100

输出样例:
在这里给出相应的输出。例如:

3 + 97 = 100
11 + 89 = 100
17 + 83 = 100
29 + 71 = 100
41 + 59 = 100
47 + 53 = 100

代码:

def Prime(n):
    flag = True
    for i in range(2, n):
        if n % i == 0:
            flag = False
            break
    return flag


def evenprimesum(n):
    if n % 2 == 0 and n > 0:
        for i in range(3, n // 2 + 1):
            if Prime(i) and Prime(n - i):
                print(i, '+', n - i, '=', n)

6-3 浮点数的十进制转二进制

在这里插入图片描述
函数接口定义:

def dec2bin(dec_num):

其中 dec_num 是用户传入的十进制浮点数,返回对应的二进制浮点数字符串。

裁判测试程序样例:

/* 你的代码将被嵌在这里 */

if __name__ == '__main__':
    dec_num = eval(input())
    bin_num = dec2bin(dec_num)
    print(bin_num)

输入样例:
在这里给出一组输入。例如:

0.1

输出样例:
在这里给出相应的输出。例如:

0b0.0001100110011001100110011001100110011001100110011001101

代码:

def dec2bin(dec_num):
    res = ""
    integer = int(dec_num)
    res += bin(integer)
    if integer == dec_num:
        return res
    decimal = dec_num - integer

    res += "."
    while(True):
        if decimal == 0:
            break
        else:
            x = decimal * 2
            res += str(int(x))
            decimal = x - int(x)
    return res

6-4 实现象棋中相的走法

在这里插入图片描述
函数接口定义:

def moves_elephant(pos):

pos是一个二元元组,为红相或黑象的位置

裁判测试程序样例:

# 返回棋子元组,比如("黑","炮");如为空返回(0,"空")
def getPiece(pos):
    return board[pos] # 返回元组

# 返回棋子的颜色
def getColor(piece):
    return piece[0]

def moves_empty_board_elephant(pos):
    return [(pos[0] - 2, pos[1] - 2), (pos[0] - 2, pos[1] + 2), (pos[0] + 2, pos[1] - 2), (pos[0] + 2, pos[1] + 2)]

# 返回象的合法位置列表
def moves_elephant(pos):
    # 请添加你的函数代码

def main():
    global board
    board =  {(0,0):(0,"空"), (0,1):(0,"空"), (0,2):(0,"空"), (0,3):(0,"空"), (0,4):("红","卒"), (0,5):(0,"空"), (0,6):(0,"空"), (0,7):(0,"空"), (0,8):(0,"空"), (0,9):("红","炮"),
    (1,0):(0,"空"), (1,1):(0,"空"), (1,2):(0,"空"), (1,3):(0,"空"), (1,4):(0,"空"), (1,5):(0,"空"), (1,6):(0,"空"), (1,7):(0,"空"), (1,8):("红","马"), (1,9):("红","马"),
    (2,0):(0,"空"), (2,1):(0,"空"), (2,2):(0,"空"), (2,3):(0,"空"), (2,4):(0,"空"), (2,5):(0,"空"), (2,6):(0,"空"), (2,7):(0,"空"), (2,8):(0,"空"), (2,9):(0,"空"),
    (3,0):(0,"空"), (3,1):(0,"空"), (3,2):(0,"空"), (3,3):(0,"空"), (3,4):(0,"空"), (3,5):(0,"空"), (3,6):(0,"空"), (3,7):("黑","士"), (3,8):(0,"空"), (3,9):("黑","炮"),
    (4,0):("红","将"), (4,1):("红","士"), (4,2):("红","象"), (4,3):(0,"空"), (4,4):(0,"空"), (4,5):("黑","车"), (4,6):(0,"空"), (4,7):("黑","象"), (4,8):("黑","士"), (4,9):("黑","将"),
    (5,0):("红","士"), (5,1):(0,"空"), (5,2):(0,"空"), (5,3):(0,"空"), (5,4):(0,"空"), (5,5):(0,"空"), (5,6):(0,"空"), (5,7):(0,"空"), (5,8):(0,"空"), (5,9):(0,"空"),
    (6,0):("红","象"), (6,1):(0,"空"), (6,2):(0,"空"), (6,3):(0,"空"), (6,4):("红","卒"), (6,5):(0,"空"), (6,6):(0,"空"), (6,7):(0,"空"), (6,8):(0,"空"), (6,9):("黑","象"), 
    (7,0):(0,"空"), (7,1):(0,"空"), (7,2):(0,"空"), (7,3):(0,"空"), (7,4):(0,"空"), (7,5):(0,"空"), (7,6):(0,"空"), (7,7):(0,"空"), (7,8):(0,"空"), (7,9):(0,"空"),
    (8,0):(0,"空"), (8,1):(0,"空"), (8,2):(0,"空"), (8,3):(0,"空"), (8,4):("红","卒"), (8,5):(0,"空"), (8,6):(0,"空"), (8,7):(0,"空"), (8,8):(0,"空"), (8,9):(0,"空"),
    }
    print(*moves_elephant((4,2)))

if __name__ == '__main__':
    main()

输入样例:
无输入


输出样例:

(2, 0) (2, 4)

代码:

# 返回象的合法位置列表
def moves_elephant(pos):
    # 请添加你的函数代码

    # print(getColor(pos))
    # print(pos[0], pos[1])
    # print(getPiece((pos[0] - 2, pos[1] - 2)))

    lis = []
    result = getPiece((pos[0] - 2, pos[1] - 2))
    # print(result[0])
    # print(result[1])
    if result[1] == "空":
        lis.append((pos[0] - 2, pos[1] - 2))
    result = getPiece((pos[0] - 2, pos[1] + 2))
    if result[1] == "空":
        lis.append((pos[0] - 2, pos[1] + 2))
    result = getPiece((pos[0] + 2, pos[1] - 2))
    if result[1] == "空":
        lis.append((pos[0] + 2, pos[1] - 2))
    result = getPiece((pos[0] + 2, pos[1] + 2))
    if result[1] == "空":
        lis.append((pos[0] + 2, pos[1] + 2))
    return lis

6-5 富翁与骗子 - 实验12 用函数实现模块化程序设计 - 《Python编程基础及应用实验教程》,高教社

在一次酒会上,富翁A遇到了骗子B。骗子对富翁说:“我成立了一个互助基金会,您可以将短期不用的资金存到我这里来,存期30天。第一天您只需要存入1分钱,第二天存入两分钱,依次类推,以后每天存入的钱是前一天的两倍,直到30天期满(含30天)。从您存入钱的第一天开始,您每天可以支取30万元,一直到30天期满(含30天)。”富翁觉得有利可图,欣然同意,两人签订了协议,约定按照上述要求存入资金,并且每天按照最大额度提取资金,合约结束后两人就互不相欠。

请完善下述程序,从键盘读入合约天数以及单日取款金额,计算并输出富翁的盈亏金额。

函数接口定义:

def deposit(n)

def withdraw(n,amount)
  • 函数deposit(n)用于求n天的存钱总额;
  • 函数withdraw(n,amount)用于求n天的提款总额,其中,参数amount为每日提款额。

注意:仅需提交两个函数的定义代码,不要提交完整程序。

裁判测试程序样例:

#请将两个函数定义在此处

days,amount=eval(input())
diff=deposit(days)-withdraw(days,amount)
if diff>0:
    print("富翁亏损: {:.2f}".format(diff))
else:
    print("富翁赢利: {:.2f}".format(0-diff))

输入样例:
在这里给出一组输入。例如:

30,300000

输出样例:
在这里给出相应的输出。例如:

富翁亏损: 1737418.23

代码:

def deposit(n):
    x = 0.01
    count = 0.0
    for i in range(0, n):
        count += x
        x = x * 2
    return count


def withdraw(n, amount):
    return n * amount

编程题

7-1 互质数

在这里插入图片描述
输入样例:

1
3
3 11
5 11
10 12

输出样例:

2

代码:

import math

t = int(input())
while t > 0:
    count = 0
    n = int(input())
    for i in range(0, n):
        a, b = map(int, input().split())
        if math.gcd(a, b) == 1:
            count += 1
    print(count)
    t -= 1

7-2 三七二十一

在这里插入图片描述
输入样例:

2
1 7
1 100

输出样例:

none
8 29 50 71 92

代码:

t = int(input())
while t > 0:
    a, b = map(int, input().split())
    yes = 0
    for n in range(a, b + 1):
        if n % 3 == 2 and n % 7 == 1 and yes == 0:
            yes = 1
            print(n, end="")
        elif n % 3 == 2 and n % 7 == 1 and yes != 0:
            print(" {}".format(n), end="")
    if yes == 0:
        print("none")
    else:
        print()
    t -= 1

7-3 学生成绩分析

在这里插入图片描述
输入样例:

66 78 95 63 85 94 99

输出样例:

[(85, 2.1), (78, 4.9), (94, 11.1), (95, 12.1), (99, 16.1), (66, 16.9), (63, 19.9)]

代码:

grades = list(map(str, input().split()))
num = []
for x in grades:
    num.append(eval(x))
avg = sum(num) / len(num)

lis = []
for i in range(len(num)):
    lis.append((num[i], round(abs(avg - num[i]), 1)))
print(sorted(lis, key=lambda n: n[1]))

7-4 多个数的最小公倍数

在这里插入图片描述
输入样例:

4
3 5 7 15
5 1 2 4 3 5
8 7 15 12 3 4 6 4 9
2 45000 50000

输出样例:

105
60
1260
450000

代码:

import math

# math.lcm(a, b)
t = int(input())
for i in range(0, t):
    grades = list(map(int, input().split()))
    # grades = sorted(grade, reverse=True)
    # print(grades)
    x = grades[1]
    for j in range(2, len(grades)):
        x = math.lcm(x, grades[j])
    print(x)

7-5 统计函数

在这里插入图片描述
输入样例:
在这里给出一组输入。例如:

1234helll00++++----BBBBB

输出样例:
在这里给出相应的输出。例如:

(5, 5, 6, 8)

代码:

def count_test(st):
    cap, small, num, other = 0, 0, 0, 0
    for i in st:
        if i.isupper():
            cap = cap + 1
        elif i.islower():
            small = small + 1
        elif i.isdigit():
            num = num + 1
        else:
            other = other + 1
    print("(%d, %d, %d, %d)" % (cap, small, num, other))


string = input()
count_test(string)

7-6 数字螺旋方阵

在这里插入图片描述
输入样例:

2
5
6

输出样例:

  25  24  23  22  21
  10   9   8   7  20
  11   2   1   6  19
  12   3   4   5  18
  13  14  15  16  17
  36  35  34  33  32  31
  17  16  15  14  13  30
  18   5   4   3  12  29
  19   6   1   2  11  28
  20   7   8   9  10  27
  21  22  23  24  25  26

代码:

def lis(n):  # 创建初始数组
    arr = [[0] * n for i in range(n)]
    return arr
 
 
def dfs(arr, x, y, num, n):  # 我的思路是和棋盘问题一样,用dfs因为有多种走向问题,但是不完全一样
    if n <= 0: return 0
    if n == 1:
        arr[x][y] = num
        return 0
    for i in range(n):  # 向右
        arr[x][y + i] = num
        num -= 1
    for i in range(n - 1):  # 向下
        arr[x + 1 + i][y + n - 1] = num
        num -= 1
    for i in range(n - 1):  # 向左
        arr[x + n - 1][y + n - 2 - i] = num
        num -= 1
    for i in range(n - 2):  # 向上
        arr[x + n - 2 - i][y] = num
        num -= 1
    dfs(arr, x + 1, y + 1, num, n - 2)
 
 
x = int(input())
for i in range(x):
    n = int(input())
    arr = lis(n)
    a = dfs(arr, 0, 0, n * n, n)
    # 格式化输出print
    l = '%4d' * n
    for tmp in arr:
        print(l % tuple(tmp))

7-7 进制转换

在这里插入图片描述
输入样例:

4
5 3
123 16
0 5
-12 2

输出样例:

5 12
123 7B
0 0
-12 -1100

代码:

def f(n, x):
    a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F']
    b = []
    k=0
    if n<0:
        k=1
        n=-n
    while True:
        s = n // x
        y = n % x
        b = b + [y]
        if s == 0: break
        n = s
    if k == 1:
        print("-", end="")
    for i in b[::-1]:
        print(a[i], end='')


t = int(input())
for i in range(0, t):
    x, y = map(int, input().split())
    print("%d " % x, end='')
    f(x, y)
    print()

7-8 母牛问题

在这里插入图片描述

  • 注意有多组数据

输入样例:

5
8
15

输出样例:

3
9
129

代码:

def f(n):
    if n < 4:
        return 1;
    else:
        return f(n - 1) + f(n - 3)


while True:
    try:
        n = int(input())
        print(f(n))
    except:
        break

7-9 筛选法求素数

在这里插入图片描述

  • 注意有多组数据

输入样例:

19

输出样例:

2 3 5 7 11 13 17 19

代码:

def Prime(n):
    flag = True
    for i in range(2, n):
        if n % i == 0:
            flag = False
            break
    return flag
while True:
    try:
        n = int(input())
        k = 0
        for i in range(2, n+1):
            if Prime(i):
                if k == 0:
                    print(i, end='')
                    k = 1
                else:
                    print(" %d" % i, end="")
        print()
    except:
        break

7-10 公共子串查找—实验4

在这里插入图片描述

输入样例:
在这里给出一组输入。例如:

Hefei Normal University
Anhui Hefei

输出样例:
在这里给出相应的输出。例如:

Hefei

代码:

a=input()
b=input()
f=[[0 for j in range(len(b))] for i in range(len(a))] # 构造二维数组f
for i in range(len(a)):
    for j in range(len(b)):
        if a[i]!=b[j]:
            f[i][j]=0
        else:
            f[i][j]=f[i-1][j-1]+1
# 维护了f[i][j] 要去找最长的长度
len_max=0
ans=""
for i in range(len(a)):
    for j in range(len(b)):
        if f[i][j]>len_max:
            ans=""
            len_max=f[i][j]
            for k in range(i-len_max+1,i+1):
                ans=ans+a[k]
print(ans)

22秋季Python第10周作业(类与对象)

7-01 图书价格汇总

在这里插入图片描述
输入样例:

Java程序设计:34 ;Web程序设计: 56;JSP程序设计:20

输出样例:

Java程序设计:34 
Web程序设计: 56
JSP程序设计:20
总价格为110

代码:
方法一

# 1
sum = 0
num = 0
x = input()
for i in x:
    if i == ';':
        print()
        sum += num
        num = 0
    else:
        print(i, end="")
    if i >= '0' and i <= '9':
        num = num * 10 + ord(i) - ord('0')
print()
sum += num
print("总价格为%d" % sum)

方法二

# 2
str = input().split(';')
jiage = ''
sum = 0
for i in str:
    print(i)
    for y in i:
        if y.isdigit() == True:
            jiage += y
    sum += eval(jiage)
    jiage = ''
print('总价格为{}'.format(sum))

方法三

# 3
import re
class price:
    def __init__(self,project):
        self.project=project
    def bookprice(self):
        ans=[]
        for i in self.project:
            print(i)
            ans.append(int(re.sub('\D','',i)))
        print("总价格为",sum(ans),sep='')

s=input().split(';')
ans=price(s)
ans.bookprice()

7-02 类的定义和使用

在这里插入图片描述
输入样例:

2006 3 5

输出样例:

64

(2006年3月5日是该年的第64天)

代码:
方法一

class Date:
    def __init__(self,year,month,day):
        self.year=int(year)
        self.month=int(month)
        self.day=int(day)
        
    def mycheck(self):
        if (self.year%4==0 and self.year%100!=0) or self.year%400==0:
            return True
        return False
    
    def mysolve(self):
        d=[0,31,0,31,30,31,30,31,31,30,31,30,31]
        if self.mycheck():
            d[2]=29
        else:
            d[2]=28
        ans=0
        for i in range(1,self.month):
            ans+=d[i]
        ans+=self.day
        print(ans)
        
year,month,day=input().split()
d=Date(year,month,day)
d.mysolve()

方法二

import calendar
class Date():
    def __init__(self,nian,yue,ri):
        self.nian=nian
        self.yue=yue
        self.ri=ri
    def tianshu(self,nian,yue,ri):
        sum = ri
        for i in range(1,yue):
            a,b = calendar.monthrange(nian,i)
            sum += b
        return(sum)
a,b,c = list(map(int,input().split()))
zhang = Date(a,b,c)
print(zhang.tianshu(a,b,c))

7-03 立方体类的实现

在这里插入图片描述

代码:
方法一

a=int(input())
print("{} {}".format(a*a*a,a*a*6))

方法二

class Box:
    def __init__(self,ab):
        self.ab=ab
    def myV(self):
        if self.ab==int(self.ab):
            return int(self.ab**3)
        return self.ab**3
    def myS(self):
        if self.ab==int(self.ab):
            return int((self.ab**2)*6)
        return (self.ab**2)*6
ab=float(input())
a=Box(ab)
print(a.myV(),a.myS(),sep=' ')

7-04 字符串处理

在这里插入图片描述
输入样例:

he11ll00o w0or8ld!

输出样例:

!dlrow olleh

代码:
方法一

string = input()
newstring = ''.join([i for i in string if not i.isdigit()])
print(newstring[::-1])

方法二

class str:
    def __init__(self,s):
        self.s=s
    def mydeal(self):
        ans=""
        for i in range(len(s)-1,-1,-1):
            if s[i]<'0' or s[i]>'9':
                ans+=s[i]
        print(ans)
s=input()
a=str(s)
a.mydeal()

7-05 数组元素交换

在这里插入图片描述
输入样例:

2 9 0 10

输出样例:

2
9
0
10
10
9
2
0

代码:
方法一

arr = input()
num = [int(n) for n in arr.split()]
for i in num:
    print(i)
num.sort(reverse=True)
for i in num:
    print(i)

方法二

class array:
    def __init__(self,s):
        self.s=s
    def myprint(self):
        for i in self.s:
            print(i)
    def myexchange(self):
        max_index=self.s.index(max(self.s))
        min_index=self.s.index(min(self.s))
        self.s[0],self.s[max_index]=self.s[max_index],self.s[0]
        self.s[-1],self.s[min_index]=self.s[min_index],self.s[-1]
s=list(map(int,input().split()))
a=array(s)
a.myprint()
a.myexchange()
a.myprint()

7-06 查找单价最高和最低的书籍

在这里插入图片描述
输入样例:

3	(n=3)
Programming in C
21.5
Programming in VB
18.5
Programming in Delphi
25

输出样例:

highest price: 25.0, Programming in Delphi 
lowest price: 18.5, Programming in VB 

代码:

class Book:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def ans(self):
        max_index = self.price.index(max(self.price))
        min_index = self.price.index(min(self.price))
        print("highest price: ", self.price[max_index], ", ", self.name[max_index], sep='')
        print("lowest price: ", self.price[min_index], ", ", self.name[min_index], sep='')


n = int(input())
Book_name = list()
Book_price = list()
for i in range(n):
    s = input()
    Book_name.append(s)
    p = float(input())
    Book_price.append(p)
a = Book(Book_name, Book_price)
a.ans()

7-07 学生排序

在这里插入图片描述输入样例:

3	(n=3)
1000 85
1001 90
1002 75

输出样例:

1002 75
1000 85
1001 90

代码:

class student:
    def __init__(self, project):
        self.project = project

    def mysort(self):
        s = sorted(self.project.items(), key=lambda d: d[1], reverse=False)
        for key, value in s:
            print(key, value, sep=' ')


n = int(input())
student_project = dict()
for i in range(n):
    id, score = input().split()
    score = int(score)
    student_project[id] = score

a = student(student_project)
a.mysort()

7-08 使用公历类GregorianCalendar

在这里插入图片描述

代码:

def isLeap(year):
    if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
        return True
    return False


class GregorianCalendar:
    def __init__(self, day):
        self.day = day

    def setTimeInMillis(self):
        n = self.day
        year = 0
        for i in range(1970, 3000):
            if n < 365 or (n < 366 and isLeap(i)):
                year = i
                break
            if isLeap(i):
                n -= 366
            else:
                n -= 365
        d = [0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
        if isLeap(year):
            d[2] = 29
        else:
            d[2] = 28
        month = 1
        for i in range(1, 13):
            if n >= d[i]:
                n -= d[i]
                month += 1
            else:
                break
        day = max(1, n)
        print(year, month - 1, day, sep='-')


n = int(input())
n //= (1000 * 60 * 60 * 24)
n += 1
a = GregorianCalendar(n)
a.setTimeInMillis()

7-08 2908 算日期

在这里插入图片描述
输入样例:

10/01
06/01

输出样例:

136
14

代码:

import calendar

class Date():
    def __init__(self, nian, yue, ri):
        self.nian = nian
        self.yue = yue
        self.ri = ri

    def tianshu(self, nian, yue, ri):
        sum = ri
        for i in range(1, yue):
            a, b = calendar.monthrange(nian, i)
            sum += b
        return (sum)
while True:
    try:
        b, c = list(map(int, input().split("/")))
        day1 = Date(2024, 5, 18)
        day2 = Date(2024, b, c)
        print(abs(day1.tianshu(2024, 5, 18) - day2.tianshu(2024, b, c)))
    except:
        break

7-09 计算年龄

在这里插入图片描述
输入样例:
在这里给出一组输入。例如:

1995
12
23

输出样例:
在这里给出相应的输出。例如:

age=22

代码:
方法一

year = int(input())
month = int(input())
day = int(input())
ans = 0
if month == 12 and day >= 25:
    ans = 2017 - year + 1
else:
    ans = 2017 - year
print("age={}".format(ans))

方法二

class Birthday:
    def __init__(self,year,month,day):
        self.year=year
        self.month=month
        self.day=day
    def getAge(self):
        age=2017-self.year
        if self.month==12 and self.day>=25:
            age+=1
        print("age=",age,sep='')
year=int(input())
month=int(input())
day=int(input())
a=Birthday(year,month,day)
a.getAge()

7-10 类的定义与对象使用

在这里插入图片描述
输入样例:

3
20174042001 zhangsan 20
20174042030 lisi 2
20174042050 wangwu 17

输出样例:

zhangsan 20174042001 20
bad
wangwu 20174042050 17

代码:
方法一

n = int(input())
for i in range(0, n):
    a, b, c = input().split()
    c = int(c)
    # print(a,b,c)
    if 7 <= c <= 60:
        print(b, a, c)
    else:
        print("bad")

方法二

class Stu:
    def __init__(self,num,ID,name,age):
        self.num=num
        self.id=ID
        self.name=name
        self.age=age
    def myprint(self):
        for i in range(self.num):
            if 7<=self.age[i]<=60:
                print(self.name[i],self.id[i],self.age[i],sep=' ')
            else:
                print("bad")

n=int(input())
Stu_ID=[]
Stu_name=[]
Stu_age=[]
for i in range(n):
    ID,name,age=input().split()
    Stu_ID.append(ID)
    Stu_name.append(name)
    Stu_age.append(int(age))
a=Stu(n,Stu_ID,Stu_name,Stu_age)
a.myprint()

7-11 sdust-Java-学生成绩读取与排序

在这里插入图片描述
输入样例:

小明,2001,Java,88
小刚,2002,Java,78
小丁,2003,Java,56
小宏,2004,Java,85
小明,2001,Python,84
小刚,2002,Python,98
小丁,2003,JavaWeb,66
小宏,2004,Algorithm,87
exit

输出样例:

No1:2002,小刚
No2:2001,小明
No3:2004,小宏
No4:2003,小丁

代码:

class Student:
    def __init__(self, name, ID, score):
        self.name = name
        self.ID = ID
        self.score = score

    def Score_sort(self):
        for i in range(1, len(self.name) + 1):
            max_index = self.score.index(max(self.score))
            print("No", i, ":", self.ID[max_index], ",", self.name[max_index], sep='')
            del self.score[max_index]
            del self.ID[max_index]
            del self.name[max_index]


Student_name = []
Student_id = []
Student_score = []
while True:
    s = input()
    if s == "exit":
        break
    s = s.split(',')
    if Student_name.count(s[0]) == 0:
        Student_name.append(s[0])
        Student_id.append(s[1])
        Student_score.append(int(s[3]))
    else:
        index = Student_name.index(s[0])
        Student_score[index] += int(s[3])
        Student_score[index] /= 2
ans = Student(Student_name, Student_id, Student_score)
ans.Score_sort()

7-12 课程设计排名统计

在这里插入图片描述
输入样例:

5
xiaozhao zhangwuji zhaomin zhouzhiruo 2 3 1 5 4
huangrong guojing guofu guoxiang 2 3 5 1 4
yangguo xiaolongyu limochou laowantong 3 2 1 4 5
yangkang monianci ouyangxiu zhoubotong 2 3 1 5 4
yuanchengzhi qingqing wenyi gongzhu 3 2 1 4 5

输出样例:

1 huangrong guojing guofu guoxiang
2 yangguo xiaolongyu limochou laowantong
3 xiaozhao zhangwuji zhaomin zhouzhiruo
4 yuanchengzhi qingqing wenyi gongzhu
5 yangkang monianci ouyangxiu zhoubotong

代码:

class score:
    def __init__(self, n, d, name):
        self.n = n
        self.d = d
        self.name = name

    def Group_sort(self):
        ans = dict()
        for i in range(self.n):
            ans[self.name[i]] = self.d[i + 1]
        ans = dict(sorted(ans.items(), key=lambda d: d[1], reverse=False))
        count = 1
        for key, value in ans.items():
            print(count, key, sep='')
            count += 1


n = int(input())
d = dict()
for i in range(n):
    d[i + 1] = 0
name = list()
for i in range(n):
    s = input().split()
    ss = ""
    for j in range(4):
        ss += ' '
        ss += s[0]
        del s[0]
    name.append(ss)
    for k in range(n):
        d[int(s[k])] += (k + 1)
ans = score(n, d, name)
ans.Group_sort()

7-13 领装备

在这里插入图片描述
输入样例:
在这里给出一组输入。例如:

4
10120150912233 2 4
10120150912119 4 1
10120150912126 1 3
10120150912002 3 2
2
3 4

输出样例:
在这里给出相应的输出。例如:

10120150912002 2
10120150912119 1

代码:

class game:
    def __init__(self, d, s):
        self.d = d
        self.s = s

    def gift(self):
        for i in self.s:
            print(self.d[i])


d = dict()
n = int(input())
for i in range(n):
    s = input().split()  # 玩家号 号码牌 装备星级
    d[s[1]] = (s[0] + " " + s[2])
m = int(input())
s = input().split()
ans = game(d, s)
ans.gift()

7-14 宿舍谁最高?

在这里插入图片描述
输入样例:

7
000000 Tom 175 120
000001 Jack 180 130
000001 Hale 160 140
000000 Marry 160 120
000000 Jerry 165 110
000003 ETAF 183 145
000001 Mickey 170 115

输出样例:

000000 Tom 175 120
000001 Jack 180 130
000003 ETAF 183 145

代码:

class Student:
    def __init__(self, d, ID, name, height, weight):
        self.d = d
        self.ID = ID
        self.name = name
        self.height = height
        self.weight = weight

    def home_sort(self):
        for (key, value) in self.d.items():
            max_height = 0
            max_index = 0
            cnt = self.ID.count(key)
            index = -1
            while cnt > 0:
                cnt -= 1
                index = self.ID.index(key, index + 1)
                if self.height[index] > max_height:
                    max_height = self.height[index]
                    max_index = index
            if len(self.ID[max_index]) < 6:
                self.ID[max_index] = self.ID[max_index].zfill(6)
            print(self.ID[max_index], self.name[max_index], self.height[max_index], self.weight[max_index], sep=' ')


n = int(input())
d = dict()
Student_ID = []
Student_name = []
Student_height = []
Student_weight = []
for i in range(n):
    s = input().split()
    Student_ID.append(s[0])
    if d.get(s[0], -1) == -1:
        d[s[0]] = 1
    Student_name.append(s[1])
    Student_height.append(int(s[2]))
    Student_weight.append(int(s[3]))
d = dict(sorted(d.items(), key=lambda d: d[0], reverse=False))
ans = Student(d, Student_ID, Student_name, Student_height, Student_weight)
ans.home_sort()
  • 7
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZShiJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值