Python程序设计实验5:字符串的应⽤
实验5:字符串的应⽤
1. 字符串推导式
我们之前学过列表推导式。例如,⽣成前 4 个奇数,我们可以写
[2 * num - 1 for num in range(1,5)] #⽣成[1, 3, 5, 7]
仿照上⾯写法,使⽤推导式完成以下字符串操作:
1.1 [‘apple’, ‘orange’, ‘pear’] -> [‘A’, ‘O’, ‘P’] # 第⼀个字母⼤写
分析:
通过库函数str.upper()获得对应字母的⼤写字母,再利⽤下标访问构建列表推导式
编程实现:
# Question1
myList =['apple','orange','pear']
res =[str.upper()[0]for str in myList]
print(res)
运⾏并测试:
1.2 [‘apple’, ‘orange’, ‘pear’] -> [‘apple’, ‘pear’] # 是否包含字母’p’
分析:
通过if及库函数str.find()拼接列表推导式
编程实现:
# Question2
myList =['apple','orange','pear']
res =[str for str in myList if str.find('p')!=-1]
print(res)
运⾏并测试:
1.3 [“TA_parth”, “student_poohbear”, “TA_michael”, “TA_guido”, “student_ htiek”] -> [“parth”,“michael”, “guido”] #是否以 TA_开头
分析:
通过if与库函数str.startwith()对“TA_”开头的字符串进⾏筛选。再利⽤字符串切⽚切除前三个字符。
编程实现:
# Question3
myList =["TA_parth","student_poohbear",
"TA_michael","TA_guido","student_htiek"]
res =[str[3:]for str in myList if str.startswith("TA_")]
print(res)
运⾏并测试:
1.4 [‘apple’, ‘orange’, ‘pear’] -> [(‘apple’, 5), (‘orange’, 6), (‘pear’, 4)] #⽣成列表
分析:
利⽤库函数len()获取长度拼接成元组,进⽽构建成列表
编程实现:
# Question4
myList =['apple','orange','pear']
res =[(str,len(str))for str in myList]
print(res)
运⾏并测试:
1.5 [‘apple’, ‘orange’, ‘pear’] -> {‘apple’: 5, ‘orange’: 6, ‘pear’: 4} #⽣成字典
分析:
利⽤库函数len()获取长度构建字典
编程实现:
# Question5
myList =['apple','orange','pear']
res ={str:len(str)for str in myList}
print(res)
运⾏并测试:
2. 特殊单词
有⼀种特殊的英⽂单词,它的相邻字母对之间的“距离”不断增加。如单词subway,它的相邻字母对分别为 (s, u), (u, b), (b, w), (w, a), (a, y), 字母之间的距离依次为 2,19,21,22,24(如 a 是第 1 个字母,y 是第 25 个字母,a 和 y 的距离为 24)。编写函数
is_special_word(word),word 为输⼊单词字符串, 如为特殊单词,返回 True;否则返回 False。
分析:
设置标志变量对前两个字符的差进⾏保存,并通过下标遍历整个字符串,获取ASCII码之后进⾏做差并取绝对值,与标志变量进⾏⽐较,如果⼤于标志变量则进⾏下⼀次判断,否则直接返回FALSE。当遍历完整个字符串后返回TRUE。
编程实现:
# 定义函数
def is_special_word(word):
# 设置标志变量⽤来存邻近字符距离
flag =0
# 遍历每个字符
for i in range(len(word)-1):
# 获得当前两个字符的距离
temp =abs(ord(word[i+1])-ord(word[i]))
if temp > flag:
flag = temp
continue
else:
return False
return True
# 获得输⼊并判断
str=input("Please input a word: ")
if is_special_word(str):
print(str+"is a special word")
else:
print(str+"is not a special word")
运⾏并测试:
①运⾏并测试⼀组特殊单词:
②运⾏并测试⼀组⾮特殊单词:
3. Caesar加密
Caesar 加密将⽂本中每个字符向前移动三个字母,即
A->D,B->E,…,X->A,Y->B,Z->C
如单词 PYTHON,将加密为 SBWKRQ。
编写加密函数encrypt_caesar(plaintext)和 decrypt_caesar (ciphertext),每个函数都接受⼀个参数,表⽰将要加密或解密的字符串,然后返回加密或解密之后的字符串。
注:(1)只考虑⼤写字母;(2)⾮字母字符不需要通过加密或解密来修改。如encrypt_caesar(“F1RST P0ST”)应该返回“I1UVW S0VW”;(3)encrypt_caesar(“”)应返回“”,即空字符串。
分析:
需要对待加密与待解密字符串以字符进⾏处理,⾸先获取当前待处理的字符的ASCII,并进⾏判断,如果不在‘A’的ASCII和‘Z’的ASCII之间则直接存⼊结果字符串中。如果在‘A’的ASCII和‘Z’的ASCII之间则进⾏下⼀步处理,通过将当前字符的ASCII码与‘A’的ASCII码做差获取偏移值,若为加密操作则偏移值加三(若为解密则减三)最后将偏移值对26取余后(防⽌偏移越界)加上‘A’的ASCII 码并转回字符即可。
编程实现:
# 定义加密函数
def encrypt_caesar(plaintext):
# 定义结果字符串
res =''
# 遍历整个字符串
for x in plaintext:
# 如果当前字符在A~Z中,则获取ASCII进⾏加密,要注意越界的情况
if ord(x)>=ord('A')and ord(x)<=ord('Z'):
res = res+chr(ord('A')+(ord(x)-ord('A')+3)%26)
else:
res = res+x
return res
# 定义解密函数
def decrypt_caesar(ciphertext):
# 定义结果字符串
res =''
# 遍历整个字符串
for x in ciphertext:
# 如果当前字符在A~Z中,则获取ASCII进⾏解密,要注意越界的情况
if ord(x)>=ord('A')and ord(x)<=ord('Z'):
res = res+chr(ord('A')+(ord(x)-ord('A')-3)%26)
else:
res = res+x
return res
str=input("Please input a string to encrypt: ")
print(encrypt_caesar(str))
str=input("Please input a string to decrypt: ")
print(decrypt_caesar(str))
python格式化输出format运⾏并测试:
①测试⼀般情况下的加密与解密:
②测试含有⾮法字符的加密与解密:
4. 杨辉三⾓
编写函数 print_yanghui_triangle(N),输出杨辉三⾓的前 N ⾏,要求使⽤ format 函数进⾏格式化输出。
例⼦:print_yanghui_triangle(10),输出
分析:
①三⾓计算:
通过建⽴⼆维列表保存三⾓的值。⾸先全赋为1,然后从第⼆⾏开始,对⾮1值从上到下从左到右依次进⾏遍历计算,并将结果存在⼆维列表中。
②格式化输出:
通过三⾓的⼤⼩计算出输出的宽度和⾼度。通过for循环遍历每⼀⾏,再对每⼀⾏进⾏格式化输出。
编程实现:
# 定义打印杨辉三⾓的函数
def print_yanghui_triangle(num):
# 定义⼆维列表以⽣成与保存杨辉三⾓
triangle =[[1]]
# ⾸先将三⾓全定义为1
for i in range(2, num+1):
triangle.append([1]*i)
# 通过循环循环每⼀个中间层对⾮1值进⾏修改
for j in range(1, i-1):
triangle[i-1][j]= triangle[i-2][j]+triangle[i-2][j-1]
# 计算输出的宽度
width =len(str(triangle[-1][len(triangle[-1])//2]))+3
# 计算输出的⾼度
column =len(triangle[-1])*width
# 遍历每⼀⾏进⾏输出
for sublist in triangle:
result =[]
# 对于⼀⾏中的每⼀元素进⾏输出
for contents in sublist:
result.append('{0:^{1}}'.format(str(contents), width))
# 利⽤format进⾏格式化输出
print('{0:^{1}}'.format(''.join(result), column))
# 进⾏测试
if __name__ =='__main__':
num =int(input('Please input a number:'))
print_yanghui_triangle(num)
⾸先设置⼀空⼆维列表⽤于存⽣成的三⾓。⾸先将三⾓全初始化为1。再从第⼆⾏开始,从上到下从左到右对⾮1值进⾏求解,并将结果存⼊⼆维列表中。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。