浙大版《Python 程序设计》题目集第6章-6——第7章-1

第6章-6 求指定层的元素个数

输入一个嵌套列表,再输入层数,求该层的数字元素个数。

输入格式:
第一行输入列表 第二行输入层数

输出格式:
在一行中输出元素个数

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

[1,2,[3,4,[5,6],7],8]
3

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

2

答案样例:

s = eval(input())
r = int(input())
while r > 0:
    r -= 1
    c = 0
    a = []
    for i in s:
        if isinstance(i,int):
            c += 1
        if isinstance(i,list):
            a += i
    s = a
print(c)

第6章-7 找出总分最高的学生

给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和3门课程的成绩([0,100]区间内的整数),要求输出总分最高学生的姓名、学号和总分。

输入格式:
输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩1 成绩2 成绩3”,中间以空格分隔。

输出格式:
在一行中输出总分最高学生的姓名、学号和总分,间隔一个空格。题目保证这样的学生是唯一的。

输入样例:

5
00001 huanglan 78 83 75
00002 wanghai 76 80 77
00003 shenqiang 87 83 76
10001 zhangfeng 92 88 78
21987 zhangmeng 80 82 75

输出样例:

zhangfeng 10001 258

答案样例:

num = int(input())
s = 0
for i in range(num):
    a = input().split()
    if sum(map(int,a[2:])) > s:
        s = sum(map(int,a[2:]))
        name = a[1]
        id = a[0]
print(name,id,s)

第6章-8 输出全排列

输入整数n(3<=n<=7),编写程序输出1,2,…,n整数的全排列,按字典序输出。

输入格式:
一行输入正整数n。

输出格式:
按字典序输出1到n的全排列。每种排列占一行,数字间无空格。

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

3

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

123
132
213
231
312
321

答案样例:

import random
from math import factorial
num = int(input())
x = []
for i in range(1,num+1):
    x.append(str(i))
s = set()
while len(s) < factorial(num):
    random.shuffle(x)# 随机排序
    s.add(''.join(x))# 集合自动去重
x = list(s)
x.sort()
for j in x:
    print(j)

第7章-1 词频统计

请编写程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的前10%的单词。

所谓“单词”,是指由不超过80个单词字符组成的连续字符串,但长度超过15的单词将只截取保留前15个单词字符。而合法的“单词字符”为大小写字母、数字和下划线,其它字符均认为是单词分隔符。

输入格式:
输入给出一段非空文本,最后以符号#结尾。输入保证存在至少10个不同的单词。

输出格式:
在第一行中输出文本中所有不同单词的个数。注意“单词”不区分英文大小写,例如“PAT”和“pat”被认为是同一个单词。

随后按照词频递减的顺序,按照词频:单词的格式输出词频最大的前10%的单词。若有并列,则按递增字典序输出。

输入样例:

This is a test.

The word "this" is the word with the highest frequency.

Longlonglonglongword should be cut off, so is considered as the same as longlonglonglonee.  But this_8 is different than this, and this, and this...#
this line should be ignored.

输出样例:(注意:虽然单词the也出现了4次,但因为我们只要输出前10%(即23个单词中的前2个)单词,而按照字母序,the排第3位,所以不输出。)

23
5:this
4:is

答案样例:

import sys
import re
from collections import Counter
s = "".join(i for i in sys.stdin) # 测试的时候按下ctrl+d结束输入

s = s.lower().split('#')[0]
s = re.split(r'\W+',s)# 以非数字字母下划线进行分割
s = [i for i in s if i != '']
s = list(map(lambda x: x[0:15] if len(x) > 15 else x, s))
count_s = Counter(s)#词频统计
# 由于先要按次数降序,再按字母升序,所以把数字取反,就都是按升序排列了
sort_s = sorted(list(count_s.items()),key=lambda s:(-s[-1],s[0]))
print(len(sort_s))
for i in sort_s[:int(len(sort_s)*0.1)]:
    print(f'{i[-1]}:{i[0]}')

猜你喜欢

转载自blog.csdn.net/hmh4640219/article/details/113664022