Python习题九

发布于:2022-11-09 ⋅ 阅读:(6563) ⋅ 点赞:(6)

6-1 求列表中能被3整除的数1

本题要求实现一个函数mult3(),带一个整数列表作为输入参数,仅仅输出列表中是3的倍数的那些数值,每个值占一行。

函数接口定义:

 mult3(lst)

lst是传入的整数列表。

裁判测试程序样例:

# 请在这里填写答案  

def main():
    mylist = list(map(int,input().split(",")))
    mult3(mylist)

main()

输入样例:

3,1,6,2,3,9,7,9,5,4,5

输出样例:

输出:

3
6
3
9
9

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
def mult3(lst:list):
    for i in lst:
        if i % 3 == 0:
            print(i)
 #方法二
 def mult3(lst):
    for i in lst:
        if i%3==0:
            print(i)

6-2 求列表中和为n的整数对

本题要求实现一个函数pairSum(),带两个输入参数:一个值不重复的整数列表lst和一个整数n。输出列表中所有和为n的整数对的索引。

函数接口定义:

 pairSum(lst, n)

lst是传入的整数列表,n为整数

裁判测试程序样例:

#  请在这里填写答案 

def main():
    #输入一系列以逗号隔开的整数
    lst = list(map(int,input().split(",")))
        #输入一个整数
    n = int(input())
    pairSum(lst, n)

输入样例:

7,8,5,3,4,6
11

输出样例:

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

0 4
1 3
2 5

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
def pairSum(lst, n):
    for i in range(len(lst)):
        for q in range(i,len(lst)):
            if i != q and lst[i] + lst[q] == n:
                print(i, q)
#方法二
from itertools import *
def pairSum(lst, n):      
    l=list(permutations(range(len(lst)),2))
    for i,j in l:
        if lst[i]+lst[j]==n and i<j:
            print(str(i)+" "+str(j))

7-1 词频统计 - 实验11 字典操作及应用

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

要求:

  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 = int(input())
dict1 = {}
list1 = []
for ppp in range(n):
    str = input()
    a = ''
    for i in str:
        if i.isalpha():
            a += i.lower()
        elif a != '':
            if a in list1:
                dict1[a] = dict1[a] + 1
                a = ''
            else:
                dict1[a] = 1
                list1.append(a)
                a = ''
    if a != '':
        if a in list1:
            dict1[a] = dict1[a] + 1
            a = ''
        else:
            dict1[a] = 1
            list1.append(a)
            a = ''
list1.sort()
for i in list1:
    print(i, dict1[i])
#方法二
x=eval(input())
lst=[]
for i in range(x):
    n=input().lower()
    for i in ["!",",",":","?","."]:
        n=n.replace(i," ")
    lst+=n.split()
dct={}

for i in lst:
    if i.isdigit():
        continue
    else:
        v=dct.get(i,0)
        dct[i]=v+1
lst1=sorted(dct.items(),key=lambda x:x[0])

for i,j in lst1:
    print(i+" "+str(j))

7-2 集合添加元素

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

输入格式:

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

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

输出格式:

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

输入样例:

7
UK
China
USA
France
New Zealand
UK
France

输出样例:

5

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
n = int(input())
i = input()
list1 = {i}
for lll in range(1,n):
    i = input()
    list1.add(i)
print(len(list1))
#方法二
n=eval(input())
s=set()
for i in range(n):
    s.add(input())
print(len(s))

7-3 集合应用–列表

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

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

输入格式:

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

输出格式:

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

输入样例:

161 182 161 154 176 170 167 171 170 174

输出样例:

169.375

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
list1 = list(map(int, input().split()))
list2 = list(set(list1))
print("%.3f" % (sum(list2) / len(list2)))
#方法二
x=set(input().split())
print("{:.3f}".format(sum(map(int,x))/len(x)))

7-4 查验身份证

一个合法的身份证号码由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

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
def jisuan(str):
    sum = 0
    list1 = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
    for i in range(17):
        sum += int(str[i]) * list1[i]
    return sum % 11
 
 
dict1 = {0: '1', 1: '0', 2: 'X', 3: '9', 4: '8', 5: '7', 6: '6', 7: '5', 8: '4', 9: '3', 10: '2'}
flag = True
nnn = eval(input())
for lll in range(nnn):
    id = input()
    try:
        i = jisuan(id)
        if dict1[i] != id[17]:
            print(id)
            flag = False
    except:
        print(id)
        flag = False
if (flag):
    print("All passed")
#方法二
w=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
m=["1","0","X","9","8","7","6","5","4","3","2"]
n=eval(input())
f=0
for i in range(n):
    sf=input()
    nm=sf[:-1]
    sg=sf[-1]
    try:
        lst=list(map(int,nm))
        s=0
        for i in range(17):
            s+=lst[i]*w[i]
        s=m[s%11]
        if s!=sg:
            print(sf)
            f=1
    except:
        print(sf)
        f=1
        continue

if f==0:
    print("All passed")

7-5 淘淘不喜欢3、6、9

淘淘不喜欢数字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

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
n = eval(input())
list1 = []
if '3' not in str(n) and '6' not in str(n) and '9' not in str(n):
    for i in range(1, n + 1):
        if '3' not in str(i) and '6' not in str(i) and '9' not in str(i):
            list1.append(i)
    print(sum(list1))
else:
    print("淘淘不会数%s" % n)
#方法二
n=eval(input())
if "3" in str(n) or "6" in str(n) or "9" in str(n):
    print("淘淘不会数{}".format(n))
else:
    l3=[i for i in range(1,n+1) if not "3" in str(i)]
    l6=[i for i in range(1,n+1) if not "6" in str(i)]
    l9=[i for i in range(1,n+1) if not "9" in str(i)]
    print(sum(set(l3)&set(l6)&set(l9)))

7-6 sdut-统计两个字符串中相同的字符个数

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

输入格式:

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

输出格式:

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

输入样例:

AEIOU
HELLO World!

输出样例:

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

2

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
n = input()
m = input()
dict1 = {}
for i in n:
    if i in m:
        dict1[i] = 1
        
print(len(dict1))
#方法二
print(len(set(input())&set(input())))

7-7 sdut-统计工龄

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

输入格式:

首先给出正整数N(≤105 ),即员工总人数;随后给出N个整数,即每个员工的工龄,范围在[0, 50]

输出格式:

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

输入样例:

8
10 2 0 5 7 2 5 2

输出样例:

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

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

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
n = int(input())
list1 = list(map(int, input().split()))
list2 = list(set(list1))
dict1 = {}
for i in list1:
    if i in dict1:
        dict1[i] += 1
    else:
        dict1[i] = 1
for i in sorted(list2):
    print("%s:%s" % (i, dict1[i]))
#方法二
n=input()
lst=list(map(int,input().split()))
dct={}
for i in lst:
    v=dct.get(i,0)
    dct[i]=v+1
    
l=sorted(dct.items(),key=lambda x:x[0])

for i,j in l:
    print("{}:{}".format(i,j))

7-8 sdut-字典合并

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

注意: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

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
dict1 = dict(eval(input()))
dict2 = dict(eval(input()))
list1 = []
for i in dict1:
    if i in dict2:
        dict2[i] += dict1[i]
    else:
        dict2[i] = dict1[i]
for i in dict2:
    list1.append(i)
list2 = list(set(list1))
list3 = []
list4 = []
for i in list2:
    if isinstance(i, str):
        list3.append(i)
        list4.append(ord(i))
    else:
        list4.append(i)
dict3 = {}
for i in dict2:
    if isinstance(i, str):
        dict3[ord(i)] = dict2[i]
    else:
        dict3[i] = dict2[i]
for i in sorted(list4):
    if chr(i) not in list3:
        print("%s:%s" % (i, dict3[i]))
    else:
        print("'%s':%s" % (chr(i), dict3[i]))
#方法二
d1=eval(input())
d2=eval(input())

for i in d2:
    v=d1.get(i,0)
    x=d2[i]
    d1[i]=v+x

s=sorted(d1.items(),key=lambda x:x[0] if type(x[0])==type(1) else ord(x[0]))

for i,j in s:
    if type(i)==type(1):
        print("{}:{}".format(i,j))
    else:
        print("'{}':{}".format(i,j))

本文含有隐藏内容,请 开通VIP 后查看