头歌 第6章 字符串 python
1.第1关:练习-Python字符串之综合练习一
任务:给定一个字符串,该字符串中包含了许多邮箱号,使用字符串函数筛选出这些邮箱号,并根据不同的电子邮件服务商来分类。
分类结果为一个字典,字典的键为邮箱号中`@`和`.com`之间的一截,字典的值为包含邮箱号的列表
import copy
str1 = input()# 包含邮箱号的字符串,input()输入的都是字符串
Str =copy.deepcopy(str1) #复制一个
count=Str.count("@")#看看有多少个邮箱号码
list1=list(str1.split(','))#把邮箱号全部放入list1中作为邮箱的value列表
list2=[]#定义一个空列表,作为邮箱类名的key值列表
for i in range(0,count):#有几个邮箱切几次
a = Str.find("@")# 返回@的位置
b = Str.find(".")# 返回.的位置
if Str[a+1:b] not in list2:#去重操作,因为可能有好几个同类别的邮箱
list2.append(Str[a+1:b])#把邮箱类名放入list2中
Str=Str[b+4:]#把前面判断过的邮箱号码删除,接着判断知道判断结束为止
dic={}#定义一个空列表,将其键与值对应存入,注意这里一个键对应多个值,所以值的类型是列表,(题目要求已经给出)
for i in list2:
for j in list1:
if j.endswith(i+".com"):#如果值是以邮箱名+.com结尾
dic.setdefault(i,[]).append(j)#就加入到key对应的列表中
res=[]#返回结果列表
keys=[]#key值列表
values=[]#value值列表
for key,valu in dic.items():#遍历字典
keys.append(key)#将键加入到keys列表中
values.append(valu)#将值加入到values列表中,注意这里有一个列表嵌套,列表里面还有列表
for i in range(len(keys)):#有几个键就循环几次
str4=",".join(values[i])#去除了列表的方括号
res.append(keys[i]+':'+str4)#将格式化后的元素加入到返回结果列表里面
res.sort()#进行排序,要符合测试集给出的顺序
print(res)#输出答案###
2.第2关:练习-Python字符串之综合练习二
任务:给定一个字符串,该字符串的内容为一个英语短句,请编写代码实现单词的反向排序
str1 = input()
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 使用字符串函数实现单词反向排序,打印反向排序之后的结果
list1 = str1.split()
list1.reverse()
str2 = " ".join(list1)
print(str2)
3.第3关:练习-Python字符串之综合练习三
任务:给定一个字符串,该字符串是一个包含地名、空格、特殊符号和 html 标签的字符串,请使用字符串函数筛选出其中的地名。
import re
str1 = input()
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 使用字符串函数来清洗出字符串中的地名
clean_string = re.sub(r'<[^>]+>', '', str1)
# 输出结果
# 去除 ** 字符
final_string = clean_string.replace('**', '')
# 输出最终结果
print(final_string)
4.第4关:练习-Python字符串之密码安全强度检查
password = input() # 获取密码字符串
# 定义判断密码安全性的函数
def check_password_security(password):
# 判断是否为低级密码
if password.isalnum():
if password.isdigit(): # 判断是否由单纯的数字或字母组成
return "低级密码"
elif password.isalpha():
return "低级密码"
# 判断是否为高级密码
if (len(password) >= 8 and
password[0].isalpha() and # 判断是否由字母开头
any(char.isdigit() for char in password) and # 判断是否包含数字
any(char.isalpha() for char in password) and # 判断是否包含字母
any(not char.isalnum() for char in password)): # 判断是否包含特殊字符
return "高级密码"
# 其余类型的密码都属于中级密码
return "中级密码"
# 调用函数并打印结果
print(check_password_security(password))
5.第5关:练习-Python字符串之验证码生成
任务:请编写代码实现生成一个 n 位的验证码,验证码可由大小写字母和数字组成
import random
import string
n = int(input()) # 验证码的位数
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 使用string和random模块随机生成n位的验证码,将生成的验证码赋值给变量 result
result = ''.join(random.choices(string.ascii_letters + string.digits, k=n))
########## End ##########
if result.isalnum() and len(result)==n:
print(result)
print("验证码生成成功")
else:
print("验证码生成错误")
6.第6关:学习-Python字符串之随机密码生成
import random
import string
########## Begin ##########
# 使用 random 模块实现随机生成一个 8 位数的密码,将密码赋值给变量 password
password = ''.join(random.choices(string.ascii_letters + string.digits, k=8))
########## End ##########
if len(str(password)) == 8:
print(password)
print("随机密码生成成功")
else:
print("随机密码生成失败,长度不为8")
7.第7关:练习-Python字符串之内置函数应用
任务:使用内置函数将一个列表转换为一个字典,字典的键为该元素在列表中的下标,
字典的值为该元素的值,打印转换后的字典。
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 使用内置函数将列表转换为字典,打印转换后的字典
my_list = eval(input())
my_dict = {index: value for index, value in enumerate(my_list)}
########## End ##########
print(my_dict)
########## End ##########
8.第8关:学习-Python字符串之内置函数应用
任务:给定一个字符串,利用内置函数判断该字符串是否为回文串。该字符串通过 input 函数获取。如果是回文串则输出“是回文串”,如果不是则输出“不是回文串”
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 利用内置函数判断该字符串是否为回文串
n1 = input()
if n1 == n1[::-1]:
print("是回文串")
else:
print("不是回文串")
9.练习-Python字符串常用操作之大小写转换
任务:给定一个字母,判断字母的大小写,如果是大写,将该字母转换为小写,反之,将字母改为大写。
该字母通过 input 函数获取。打印转换后的字母。如果不是字母则输出“不是字母”
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 使用字符串函数实现字母大小写的切换
def convert_case(char):
# 检查输入是否为单个字符
if len(char) != 1:
return "请输入一个字符"
# 检查输入是否是字母
if char.isalpha():
# 如果是大写字母,转换为小写;如果是小写字母,转换为大写
if char.isupper():
return char.lower()
elif char.islower():
return char.upper()
else:
# 如果不是字母,返回提示信息
return "不是字母"
# 示例使用
user_input = input()
result = convert_case(user_input)
print(result)
########## End ##########
10.学习-Python字符串常用操作之登录信息规范性检查
任务:在登陆一个账号时,通常要检查账号和密码是否符合要求,现在给定一个账号字符串和一个密码字符串,账号只能为数字,密码可以是字母或者数字。
账号和密码都通过 input 函数获取,请判断账号和密码是否符合要求。
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
account = input() # 账号
password = input() # 密码
if account.isdecimal() != True:
print("账号违规")
if password.isalnum() != True:
print("密码违规")
if password.isalnum() == True and account.isdecimal() == True:
print("账号密码符合要求")
# 使用字符串函数来判断账号密码是否违规,并按照任务要求输出
########## End ##########
11.学习-Python字符串常用操作之一
任务:给定一个完整的网址,请使用字符串函数清洗出其中的域名。也就是获取www.educoder.net中的educoder。网址通过 input 函数获取,打印出域名
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 使用字符串函数筛选出网址中的域名,并打印该域名
str1 = input()
str2 = str1.split(".",2)
print(str2[1])
########## End ##########
12.练习-Python字符串常用操作之一
任务:给定一个字符串,统计字符串中每个字符在该字符串中出现位置的所有下标。输出一个字典,字典的键为字符,值为该字符出现的所有下标。
举个例子:“hello” 输出结果:{"h":[0],"e":[1],"l":[2,3],"o":[4]}
# 给定一个字符串
s = input() # 获取字符串
########## Begin ##########
# 使用字符串函数完成本关任务,并按照要求打印结果
result = {} # 初始化一个空字典来存储结果
# 遍历字符串,统计每个字符出现的所有下标
for index, char in enumerate(s):
if char in result:
result[char].append(index) # 如果字符已在字典中,添加下标
else:
result[char] = [index] # 如果字符不在字典中,添加字符和下标
# 打印结果
print(result)
########## End ##########
13.学习-Python字符串常用操作之二
任务:给定一个字符串,去除字符串中非字母的字符,然后将每个字符串的首字母大写,打印处理后的字符串。字符串通过 input 函数获取
import re
def remove_non_alpha(s):
return re.sub(r'[^a-zA-Z]', '', s)
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 第一步:使用字符串函数去除字符串中非字符的字符,可以观察测试输入来完成
str1 = input()
# 第二步:将字符串的首字母大写,并打印处理后的字符串
result = remove_non_alpha(str1)
str2 = result.capitalize()
print(str2)
########## End ##########
14.练习-Python字符串常用操作之二
任务:给定一个字符串,判断该字符串是否是回文串。字符串通过 input 获取,如果是,则输出“是回文串”,如果不是,则输出“不是回文串”。
n1 = input()
if n1 == n1[::-1]:
print("是回文串")
else:
print("不是回文串")
15.学习-Python字符串常用操作之三
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 使用字符串函数来判断电话号码的运营商
str1 = input()
if (str1.startswith("130",0,4)) == True :
print("中国联通")
elif (str1.startswith("133",0,4)) == True :
print("中国电信")
elif (str1.startswith("134",0,4)) == True :
print("中国移动")
else:
print("输入数据不合法")
########## End ##########
16.练习-Python字符串常用操作之三
任务:在编写代码时,我们规定在代码末尾注释时需要给定 5 个空格来隔开。以字符串的形式给定一行代码,请使用字符串函数将代码中的注释修改为符合要求的形式。打印修改后的代码
code = input()
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 第一步:切分出注释部分代码
str1 = code.strip("# 注释")
str3 = str1 + " " + "# 注释"
print(str3)
17.练习-Python字符串之格式化
任务:输出如下所示格式美观的杨辉三角的前 n 行。n 通过 input 函数获取。下例为 n=7 时的杨辉三角。具体输出情况可以查看预期输出
n = int(input())
list1 = [[1],[1,1]]
for i in range(2,n):
pre = list1[i-1]
cul = [1]
for j in range(i-1):
cul.append(pre[j]+pre[j+1])
cul.append(1)
list1.append(cul)
for i in range(n):
print(" "*3*(n-i-1),end="")
xx = 1
for j in list1[i]:
if xx == 1:
print("%5s"%j,end="")
else:
print("%6s"%j,end="")
xx += 1
print(" "*(3*(n-i-1)+4))
########## End ##########
18.学习-Python字符串之格式化
任务:给定一个列表,计算列表内所有数据标准差,结果保留小数点后 2 位。
import math
list1 = eval(input())
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
########## Begin ##########
# 计算列表内所有元素的标准差
# 首先计算平均值
mean = sum(list1) / len(list1)
# 计算方差
variance = sum((x - mean) ** 2 for x in list1) / len(list1)
# 计算标准差
std_dev = math.sqrt(variance)
# 使用格式化输出打印结果,并保留小数点后2位
print(f"{std_dev:.2f}")
########## End ##########
19.练习-Python字符串之文本编码格式
任务:给定一个字符串乱码,请对该字符串进行合适的编码和解码操作,使字符串还原成正常的格式。字符串乱码通过 input 获取
x=input()
t=x.encode('gbk')
print(t.decode('utf-8'))
20.学习-Python字符串之文本编码格式
任务:给定一个编码之后的字符串,请输出它的编码方式,并输出解码之后的字符串。结果以字典的形式输出。
输出格式:{"编码格式": "gbk","字符串":···}
import chardet
# 原始输入
encoded_string = eval(input())
# 使用chardet检测编码
result = chardet.detect(encoded_string)
# 解码字符串
decoded_string = encoded_string.decode(result['encoding'])
# 输出结果
output = {
'编码格式': result['encoding'],
'字符串': decoded_string
}
print(output)
# print(f"编码格式: {result[keys]}, 字符串: {decoded_string}")
# 解码字符串
########## End ##########
作者:ππ抓蛙