2024年北理工Python123第六章测验题整理
测验题一般不会太难,但是这次的题目,未免太多了,有的还很难
一、选择题
二、编程题
1-10 列表和字符串
1-10都是和列表、字符串有关的题目,都很简单,我直接给出代码了
1.列表排序输出
import random
random.seed(int(input()))
lis = [random.randint(1,100) for _ in range(10)]lis1=[]
while len(lis) > 0:m = min(lis)lis.remove(m)lis1.append(m)
print(lis1)
2.列表排序
s=input()
lis=[]
for i in range(len(s)):lis.append(s[i])
lis.sort()
print(lis)
3.列表插入
ls = ['2', '3', '0', '1', '5']
s=input()
i=eval(input())
ls.insert(i,s)
ls.append(s)
print(ls)
4.列表删除
s='我有一所房子面朝大海春暖花开'
ls=[]
for i in s:ls.append(i)
m,n=input().split(",")
m=int(m)
n=int(n)
del ls[m:n]
print(ls)
5.列表的基本操作
a = list(input())
b = list(input())
print(a + b)
print(a * 3)
print(b[2],b[-1],sep = ' ')
print(a[1:4])
print(len(a),len(b),sep = ',')
print(min(a),max(b))
6.列表的合并与排序
list1 = list(map(int,input().split()))
list2 = list(map(int,input().split()))
lis=list1+list2
lis.sort(reverse=True)
print(lis)
7.列表元素的查找和添加
aList = input().split()
if 'and' in aList:ind = aList.index('and')aList.insert(ind,'Anna')
print(' '.join(aList))
8.字符串的去重操作
这题有些意思,贴出了题目
s=input()
new_s=""
for i in s:if i not in new_s:new_s+=i
lis=list(new_s)
lis.sort(key=new_s.index) #字符串s的顺序
lis.sort()
print(''.join(lis))
9.列表去重
name_lst = input().split(',') # 输入的字符串节分为列表
name_no_duplicate = list(set(name_lst)) # 去除重复的元素
print(sorted(name_no_duplicate, key=name_lst.index))
10.删除列表中的重复元素
import random
# 输入m和n
m=int(input())
n=int(input())
# 以m作为随机数种子
random.seed(m)
# 随机生成n个0-9的整数
nums = [str(random.randint(0, 9)) for i in range(n)]
# 输出原始列表
print(nums)
# 去重排序
result = sorted(list(set(nums)))
# 输出去重排序后的列表
print(result)
11.集合添加元素
N=int(input())
result=set()
for i in range(N):result.add(input())
print(len(result))
这题。。也很简单,没必要贴的题目
12.列表嵌套字典的排序
这题就有点意思了
我的代码:
n = int(input())
ls = []
for i in range(n):a, b = input().split()dicts = {"name": a, "age": int(b)}ls.append(dicts)
list_age = sorted(ls, key=lambda x: x['age'])
list_name = sorted(ls, key=lambda x: x['name'])
print(list_age)
print(list_name)
参考代码:
n = int(input())
ls = []
for i in range(n):x = input().split()ls.append({"name":x[0],"age":int(x[1])})print(sorted(ls,key=lambda x: x['age']))
print(sorted(ls,key=lambda x: x['name']))
思路都相同,这个更精简
13.字典查询
这个也很简单
# 字典数据
phone_book = {"赵广辉": "13299887777","特朗普": "814666888","普京": "522888666","吴京": "13999887777"
}def search_phone(name):# 查询电话号码phone_number = phone_book.get(name)if phone_number:print(f"{name}:{phone_number}")else:print("数据不存在")# 用户输入姓名
input_name = input()
search_phone(input_name)
14.字典增加元素
也很简单,和1-10一样还是连续题目(乐)
dict1 = {'赵小明': '13299887777', '特明朗': '814666888', '普希京': '522888666', '吴小京': '13999887777'}
def search_phone(name):# 查询电话号码phone_number = dict1.get(name)if phone_number:print("您输入的姓名在通讯录中已存在")else:dict1[name]=phfor name in list(dict1.keys()):print(name+':'+dict1[name])# 用户输入姓名
name = input()
ph=input()
search_phone(name)
15.字典更新
又是连续
dict1={'赵广辉': '13299887777', '特朗普': '814666888', '普京': '522888666', '吴京': '13999887777'}
updateName = input()
newvalue = input()
if (updateName in dict1):dict1[updateName] = newvalue
else:print('数据不存在')
for key in dict1:print(key + ':' + dict1.get(key))
16.双一流高校及所在省份统计
很无趣的题目
d = {"北京大学":"北京", "中国人民大学":"北京","清华大学":"北京",\
"北京航空航天大学":"北京","北京理工大学":"北京","中国农业大学":"北京",\
"北京师范大学":"北京","中央民族大学":"北京","南开大学":"天津",\
"天津大学":"天津","大连理工大学":"辽宁","吉林大学":"吉林",\
"哈尔滨工业大学":"黑龙江","复旦大学":"上海", "同济大学":"上海",\
"上海交通大学":"上海","华东师范大学":"上海", "南京大学":"江苏",\
"东南大学":"江苏","浙江大学":"浙江","中国科学技术大学":"安徽",\
"厦门大学":"福建","山东大学":"山东", "中国海洋大学":"山东",\
"武汉大学":"湖北","华中科技大学":"湖北", "中南大学":"湖南",\
"中山大学":"广东","华南理工大学":"广东", "四川大学":"四川",\
"电子科技大学":"四川","重庆大学":"重庆","西安交通大学":"陕西",\
"西北工业大学":"陕西","兰州大学":"甘肃", "国防科技大学":"湖南",\
"东北大学":"辽宁","郑州大学":"河南", "湖南大学":"湖南", "云南大学":"云南", \
"西北农林科技大学":"陕西", "新疆大学":"新疆"}ls = list(d.values())
dc = {}
for word in ls:dc[word] = dc.get(word, 0) + 1
for k in dc:print("{}:{}".format(k, dc[k]))
17.用字典来统计词频
无需多盐,味大
dict1 = eval(input())
for word in input().split():dict1[word] = dict1.get(word,0) + 1
print(dict1)
18.多用户登录(列表)
user_lst = ["aaa", "bbb", "ccc"] # 用户名列表
pass_lst = ["123456", "888888", "333333"] # 密码列表,用户与对应密码的序号相同
user = input() # 输入用户名
password = input() # 输入密码
if user in user_lst: # 若用户名在用户列表中存在时,判断输入的密码是否存在和序号是否与用户序号相同if password in pass_lst and pass_lst.index(password) == user_lst.index(user):print("Success")else: print("Fail")
else: # 若用户名在用户列表中不存在print("Wrong User")
19.约瑟夫环问题
太激动了当时看到这个题目,因为非常经典,用C语言写过,写了很长的代码,转化成python不过12行
def Josephus(n,k):ls_n = list(range(1,n+1))while len(ls_n) > k-1:ls_n = ls_n[k:] + ls_n[:k-1]return ls_nn,k = map(int,input().split())
if k >= 2 and n >= k:print(Josephus(n,k))
else:print('Data Error!')
20.扑克牌游戏
很长的题目,但是捋清逻辑就很简单
import randomdef start():"""初始顺序,返回元素为字符串的列表"""cards_start = [i + j for i in desigh for j in num] + ghostreturn cards_startdef shuffle_cards(cards_start):"""打乱顺序,返回元素为字符串的列表"""random.shuffle(cards_start)return cards_startdef traver(cards_shuffle, m):"""发牌给m个人,返回二维列表"""person = []for i in range(m):person.append(cards_shuffle[i::m])return persondef sort_cards(person, m):"""对m个人手上的牌进行升序排序,花色按黑红梅方,牌面按点数,大王最大,小王第二大"""person_sort = []for i in range(m):if ('jokers' in person[i]) and ('JOKERS' in person[i]):person[i].remove('jokers')person[i].remove('JOKERS')person_sort.append(sorted(person[i], key=lambda x: (desigh.index(x[0]), num.index(x[1:])))+['jokers', 'JOKERS'])elif 'jokers' in person[i]:person[i].remove('jokers')person_sort.append(sorted(person[i], key=lambda x: (desigh.index(x[0]), num.index(x[1:])))+['jokers'])elif 'JOKERS' in person[i]:person[i].remove('JOKERS')person_sort.append(sorted(person[i], key=lambda x: (desigh.index(x[0]), num.index(x[1:])))+['JOKERS'])else:person_sort.append(sorted(person[i], key=lambda x: (desigh.index(x[0]), num.index(x[1:]))))return person_sortif __name__ == '__main__':desigh = ['♠', '♥', '♣', '♦'] # 表示黑桃、红桃、梅花、方块num = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']ghost = ['jokers', 'JOKERS']n = int(input()) # 输入参与游戏的人数s = int(input())random.seed(s)print(f'参与游戏的人数:{n}')cards = start()print('新牌顺序')print(*cards)cards_after = shuffle_cards(cards)print('洗牌顺序')print(*cards_after)cards_n = traver(cards_after, n)print('每个人手上分到的牌')for i in range(n):print(*cards_n[i])cards_sort = sort_cards(cards_n, n)print('每个人手上排序的牌')for i in range(n):print(*cards_sort[i])
结束了~
我的gitcode中有我自学python整理的笔记,可以看看
https://gitee.com/li_fjyr/disposal_python