合工大python实验11~20

”’

11、编写函数:随机产生包含 n 个整数的列表,返回一个元组,其中第一个元素为所

有参数的平均值,其他元素为所有参数中大于平均值的整数。

例如: 随机产生长度为 3 的列表[2, 1, 3],输出为(2.0, 3)

”’

import random

n = int(input(‘请输入n的值’))

lst=[random.randint(1,50) for i in range (n)]

print(lst)

average=int(sum(lst)/len(lst))

alst=[average]

for i in lst:

if i>average:

alst.append(n)

print(alst)

”’

11、编写函数:随机产生包含 n 个整数的列表,返回一个元组,其中第一个元素为所

有参数的平均值,其他元素为所有参数中大于平均值的整数。

例如: 随机产生长度为 3 的列表[2, 1, 3],输出为(2.0, 3)

”’

import random

n = int(input(‘请输入n的值’))

lst=[random.randint(1,50) for i in range (n)]

print(lst)

average=int(sum(lst)/len(lst))

alst=[average]

for i in lst:

if i>average:

alst.append(n)

print(alst)

”’

13、查找两个字符串首尾交叉的最大子串长度,连接两个字符串,首尾交叉部分只保留

一份。例如,1234 和 2347 连接为 12347

要求:程序中使用 lambda 函数

”’

def check(str1, str2):

length1 = len(str1)

length = min(length1, len(str2))

k = max(range(0, length+1), key=lambda i: i if str1[length1-i:] == str2[:i]else False)

return(k,str1+str2[k:]) # k为重复字符的个数(两个字符串首尾交叉的最大子串长度)

str1 = ‘1234’

str2 = ‘2347’

print(str1, str2)

print(check(str1, str2))

”’

输出结果为:

1234 2347

(3, ‘12347’)

”’

”’

14、写一个删除列表中重复元素的函数,要求去重后元素相对位置保持不变

”’

l1 = [1, 7, 7, 8, 5, 5, 4]

print(l1)

”’

使用集合方法一:

l2 = list(set(l1))

l2.sort(key=l1.index)

print(l2)

使用集合方法二:

def dedup(items):

no_dup_items = []

seen = set()

for item in items:

if item not in seen:

no_dup_items.append(item)

seen.add(item)

return no_dup_items

”’

def dedup(items):

no_dup_items = []

for item in items:

if item not in no_dup_items:

no_dup_items.append(item)

return no_dup_items

print(dedup(l1))

”’

15、编写函数,计算传入函数的字符串中,数字、字母、空格以及其他字符的个数,

并返回结果

”’

def func(s:str):

dic={‘digit’:0,’word’:0,’space’:0,’other’:0}

for item in s:

if item.isdigit():

dic[‘digit’]+=1

elif item.isalpha():

dic[‘word’]+=1

elif item.isspace():

dic[‘space’]+=1

else:

dic[‘other’]+=1

return dic

print(func(‘H F U T 5 2 1 .’))

“””

列表推导式

字典

“””

”’

第一题

”’

”’

16、列表推导式与字典的应用

(1).问题描述:编写程序,先生成包含 1000 个随机字符的字符串,然后统计每个字

符出现的次数。;

(2).问题描述:编写一个程序,接受逗号分隔的单词序列作为输入,按字母顺序排序

后按逗号分隔的序列打印单词。假设向程序提供以下输入:

without,hello,bag,world

则输出为:

bag,hello,without,world”’

import random

import string

base = string.printable

x = string.ascii_letters + string.digits + string.punctuation

”’ 所有字母 所有数字 所有标点符号”’

y = [random.choice(x) for i in range(1000)] # 每次从x中随机取出一个元素

z = “”.join(y) # 使用join函数将取出的数据连接成字符串

print(z)

# 重点:循环遍历将取出的字符作为key保存到字典,每个字符出现的次数作为value

# 这里要明白“字典.get(参数1,参数2)”所表达的是什么意思

# ->参数1表示:key值,

# ->参数2:如果指定键的值不存在时,返回该默认值(参数2)

new_dict = dict()

for a in z:

new_dict[a] = new_dict.get(a, 0) + 1

print(new_dict)

”’

第二题

”’

word = sorted(list(set(input(‘请输入逗号分隔的单词序列’).split(‘,’))))

print(‘,’.join(word))

”’

集合的应用

”’

”’

第一题

”’

”’

17、集合的应用

(1).问题描述:编写程序,输入两个集合 setA 与 setB,分别输出它们两个交集的交、

差、并。

(2).编写一个程序,接受一系列空格分隔的单词作为输入,然后删除所有重复的单词

并按字母数字排序后打印这些单词。

”’

setA = {1,2,3,4}

setB = {4,5,6,7}

jiao=str(setA.intersection(setB))

bing=str(setA.union(setB))

cha=str(setA.difference(setB))

print(‘集合A:’+str(setA)+’集合B:’+str(setB))

print(‘交集’+jiao)

print(‘并集’+bing)

print(‘差集’+cha)

”’

第二题

”’

# 方法一

word = input(‘请输入单词(空格隔开):’).split()

for i in word:

if word.count(i) > 1:

word.remove(i)

word.sort()

print(word)

# 方法二

word = input(‘请输入单词(空格隔开):’).split()

[word.remove(i) for i in word if word.count(i) > 1]

word.sort()

print(word)

# 方法三

word = sorted(list(set(input(‘请输入单词(空格隔开):’).split())))

print(word)

# 方法四

str1 = input(‘请输入单词(空格隔开):’).split()

li = []

for i in str1:

if i not in li:

li.append(i)

print(‘ ‘.join(sorted(li)))

”’

18、字符串与列表推导式的应用

问题描述: 编写程序,生成含有 n 个元素的嵌套列表,即列表的每个元素仍是列表,

要求列表中的元素是长度不超过 m 的数字或字符组成的字符串,并按照字符串长度降序输

出结果。

”’

import string

import random

ch = string.digits + string.ascii_letters#digits是生成所有数字从0-9,ascii_letterss是生成字母从a-z,A-Z

n , m=10, 10

a = [[”.join(random.sample(ch,random.randint(1,m)))] for i in range(n)]#random.sample是从序列中选N个随机且不重复的元素

print(sorted(a,key=lambda x: len(x[0]), reverse= True))#lambda表达式,得到字符串长度之后根据长度进行排序

”’

列表与切片的应用

”’

”’

19、列表与切片的应用

问题描述:编写程序,生成一个整型列表,输出包含原列表中所有元素的新列表、包含

原列表中所有元素的逆序列表,以及输出具有偶数位置的元素列表。

”’

import random

lst=[random.randint(1,10) for i in range (10)]

lst2 = lst[::-1]

lst3 = lst[::2]

print(lst)

print(lst2)

print(lst3)

”’

元组的应用

生成器推导式

从形式上看,生成器推导式与列表推导式类似,只是生成器推导式使用小括号。列表推导式直接生成列表对象,生成器推导式生成的不是列表也不是元组,而是一个生成器对象。

我们可以通过生成器对象,转化成列表或者元组。

也可以使用生成器对象的__next__()方法进行遍历,或者直接作为迭代器对象来使用。不管什么方式使用,元素访问结束后,如果需要重新访问其中的元素,必须重新创建该生成器对象。

”’

”’

20、元组的应用

问题描述:编写程序,利用生成器推导式生成包含 n 个整数元素的元组,每个元素值不

大于 m,并过滤掉偶数整数,并输出。

”’

import random

def func(n,m):

t=tuple([random.randint(1,m)for i in range(n)])

print(‘过滤前:’,t)

print(‘过滤后:’,tuple(filter(lambda x:x%2!=0,t)))

func(5,10)