Python(第十周)

1.词频统计 - 实验11 字典操作及应用 - 《Python编程实验》 (10 分)

从键盘读入由仅由英文构成的多行文本,借助于字典统计其中每个单词出现的次数。然后按字典递增序按格式输出每个单次出现的次数。

要求:

  1. 所有单词不区分大小写,输出时按小写格式输出;
  2. 需要排除! , : ?等英文符号,即这些符号不应作为单词的构成部分;
  3. 需要排除0,1,2,… 9等数字,即这些数字不应作为单词的构成部分。
    输入格式:
    行数n
    第1行内容
    第2行内容

    第n行内容

输出格式:
单词1 单词1出现次数
单词2 单词2出现次数

单词k 单词k出现次数

注意: 单词1, 2,… k 按字典递增序。

输入样例:
4
Hello! baby! Jupyter 4 class
class ultimately.
class
jupyter
结尾无空行
输出样例:
baby 1
class 3
hello 1
jupyter 2
ultimately 1
结尾无空行

n = eval(input())
m = list()
l = list()
word = ''
for i in range(n):
    t = 0
    s = input()
    for j in s:
        if j.isalpha():
            word += j
            t = 1
        elif t == 1:
            t = 0
            l.append(word.lower())
            word = ''
    if t == 1:
        t = 0
        l.append(word.lower())
        word = ''
l.sort()
cnt = 1
for i in l:
    if i not in m:
        m.append(i)
        print("%s %d" % (i, l.count(i)))

2. 集合添加元素 (20 分)

向集合中加入单一元素,可以使用.add() 方法操作,该操作将向集合中加入。 应用你的知识帮助你的好朋友小明,小明喜欢集邮,他有大量的来自不同国家的邮票,他决定数一下他的集邮册中共有来自多少个不同国家的邮票,他请你帮忙,你一个一个的把N张邮票拿出来,找出共有多少个不重复的国家。

输入格式:
第一行输入一个整数N,表示所有邮票的数目‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

接下来的N行,每行输入一张邮票来自哪一个国家的名字

输出格式:
在一行中输出不重复的国家的数量。

输入样例:
7
UK
China
USA
France
New Zealand
UK
France
结尾无空行
输出样例:
5

n = eval(input())
s = set()
for i in range(n):
    s.add(input())
print(len(s))

3.集合应用–列表 (20 分)

集合是一个无序的、没有重复元素的数据类型,在输出或转为序列类型时,其元素位置随机出现。

李白是一个社区大学的老师,一天,他让学生小明计算一下温室里植物的平均高度。‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬ 平均高度 = 不同高度的和 / 不同高度的数量

输入格式:
输入N 个用空格分隔的植物的高度

输出格式:
在一行内输出植物的平均高度,保留小数点后3位

输入样例:
161 182 161 154 176 170 167 171 170 174
结尾无空行
输出样例:
169.375

n = list(input().split())
s = set()
for i in n:
    s.add(int(i))
print("%.3f" % (sum(s) / len(s)))

4.查验身份证 (15 分)

一个合法的身份证号码由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
现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

输入格式:
输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。

输出格式:
按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed。

输入样例1:
4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X
结尾无空行
输出样例1:
12010X198901011234
110108196711301866
37070419881216001X
结尾无空行
输入样例2:
2
320124198808240056
110108196711301862
输出样例2:
All passed

n = eval(input())
l = list()
d = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
dict = {
    
    0: '1', 1: '0', 2: 'X', 3: '9', 4: '8', 5: '7', 6: '6', 7: '5', 8: '4', 9: '3', 10: '2'}
for i in range(n):
    l.append(input())
logo = 1
for x in l:
    if len(x) != 18:
        print(x)
        logo = 0
    else:
        for i in range(17):
            if x[i].isalpha():
                print(x)
                logo = 0
                break
        else:
            s = 0
            m = x[-1]
            for i in range(17):
                s += int(x[i]) * d[i]
            z = s % 11
            if dict[z] != m:
                print(x)
                logo = 0
if logo == 1:
    print("All passed")

5.淘淘不喜欢3、6、9 (10 分)

淘淘不喜欢数字3、6、9,在数数时,从1开始数,带有这三个数字的都会跳过。如:1, 2, 4, 5, 7, 8, 10, 11, 12, 14, 15, 17, 18, 20, 21, 22, 24, 25, 27, 28, 40,…… 输入一个n,求淘淘数到n时,她所数的所有数之和是多少?若n包含3、6、9,则显示,淘淘不会数到这个数。

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

输出格式:
输入淘淘数的数之和,或者提示淘淘不会数n。

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

12
结尾无空行
输出样例1:
在这里给出相应的输出。例如:

60
结尾无空行
输入样例2:
在这里给出一组输入。例如:

13
结尾无空行
输出样例2:
在这里给出相应的输出。例如:

淘淘不会数13

n = input()

if '3' in n or '6' in n or '9' in n:
    print("淘淘不会数{}".format(n))
else:
    sum = 0
    for i in range(int(n)+1):
        if '3' in str(i) or '6' in str(i) or '9' in str(i):
            continue
        else:
            sum += i
    print(sum)

6.sdut-统计两个字符串中相同的字符个数 (10 分)

输入字符串A、字符串B,求在字符串A、字符串B中相同的字符个数。

输入格式:
第一行输入,表示字符串A。 第二行输入,表示字符串B。

输出格式:
在一行内,输出字符串A、B中相同字符的个数。

输入样例:
AEIOU
HELLO World!
结尾无空行
输出样例:
在这里给出相应的输出。例如:

2

a = input()
b = input()
sum = 0
for i in set(a):
    if i in set(b):
        sum += 1
print(sum)

7.sdut-统计工龄 (10 分)

给定公司N名员工的工龄,按工龄增序输出每个工龄段有多少员工。

输入格式:
首先给出正整数N(≤10
5
),即员工总人数;随后给出N个整数,即每个员工的工龄,范围在[0, 50]。

输出格式:
按工龄的递增顺序输出每个工龄的员工个数,格式为:“工龄:人数”。 每项占一行。

输入样例:
8
10 2 0 5 7 2 5 2
结尾无空行
输出样例:
在这里给出相应的输出。例如:

0:1
2:3
5:2
7:1
10:1

n = eval(input())
y = list(map(int, input().split(" ")))
d = dict()
for i in y:
    if i in d:
        d[i] += 1
    else:
        d[i] = 1
d = sorted(d.items())
for i in d:
    print("%s:%s" % i)

8.sdut-字典合并 (10 分)

输入用字符串表示两个字典,输出合并后的字典。字典的键用一个字母或数字表示。

注意:1和‘1’是不同的关键字!

输入格式:
在第一行中输入第一个字典字符串;

在第二行中输入第二个字典字符串。

输出格式:
在一行中输出合并的字典,输出按字典序。

“1” 的 ASCII 码为 49,大于 1,排序时 1 在前,“1” 在后。其它的字符同理。

输入样例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())
b = eval(input())
for i in a:
    if i in b:
        b[i] += a[i]
    else:
        b[i] = a[i]
items = list(b.items())
items.sort(key=lambda item: ord(item[0]) if type(item[0]) == str else item[0])
for i in items:
    if type(i[0]) == str:
        print("'%s':%s" % i)
    else:
        print("%s:%s" % i)

猜你喜欢

转载自blog.csdn.net/Anemia_/article/details/121216102