python实验四:字符串
- 一
- (1)
- (2)
- (3)
- (4)
- (5)
- (6)
- 方法一
- 方法二
- (7)
- 二
- 网页上取到的代码
- (1)(2)
- (3)
- 三
- (1)
- (2)
- 实验截图
- 第一题
- 第二题
- 第三题
- 结语
一
1、已知字符串s1='The Spring is coming! We go into April happily. We hope less homework and less test .Be better all!12345 ’ 要求:
(1)
s2=’hahahahaha’,将s1和s2连接生成字符串s3,并输出s3
s3=s1+s2
print(s3)
(2)
使用字符串内置函数,将s3中的字母h,用r替代,输出s3;
print(s3.replace('h','r'))
(3)
从键盘上输入任意字符或字符串,使用字符串内置函数判断其是否在s1中出现过,如果出现,则返回字符串中的位置,未出现过,则返回-1;
a=input()
print(s3.find(a))
(4)
将s1以空格为分割,切分成以符合条件的字符串为元素的列表ls1;
ls1=s1.split()
print(ls1)
(5)
统计ls1长度;计算ls1[1:-2];为列表添加元素‘I love today!’;
print("ls1的长度:",len(ls1),"ls1[1:-2]的长度:",len(ls1[1:-2]))
ls1.append('I love today')
print(ls1)
(6)
统计字符串s1中大写字母、小写字母、数字和其他字符出现的次数,并输出(有几种统计方法呢,你喜欢哪一种呢)。
方法一
_upper=0
_lower=0
_digit=0
_other=0
for i in s1:
if i.isupper():
_upper+=1
elif i.islower():
_lower+=1
elif i.isdigit():
_digit+=1
else:
_other+=1
print("大写字母:",_upper)
print("小写字母:",_lower)
print("数字:",_digit)
print("其他字符:",_other)
方法二
upper=len(re.findall('[A-Z]',s1))
lower=len(re.findall('[a-z]',s1))
digit=len(re.findall('\d',s1))
other=len(re.findall('[^a-zA-Z0-9]',s1))
print("大写字母:",upper)
print("小写字母:",lower)
print("数字:",digit)
print("其他字符:",other)
(7)
(选做):如果可以,能否将第六问中的结果写到字典里输出呢?
dict1={"大写字母":upper,"小写字母":lower,"数字":digit,"其他字符":other}
print(dict1)
二
网页上取到的代码
这里我直接将它弄到了字符串里面,由于这里面提取到的网页图片没有https,所以它原本前面带的东西我特意带上了。
str1="""
<li>
<a href="/webplat/info/news_version3/15592/29030/29082/29084/m11740/202301/928155.shtml" class="tganime-fadein-trigger" target="_blank" οnclick="PTTSendClick('link','new-hero-item2','新英雄-列表-小图2');">
<img width="68" height="173" data-original="//game.gtimg.cn/images/yxzj/img201606/freehero/vertical/544.jpg" class="lazy" alt="赵怀真"/>
<span class="hero_name tganime-fadein-child">赵怀真</span>
</a>
</li>
<li>
<a href="/webplat/info/news_version3/15592/29030/29082/29084/m11740/202212/926468.shtml" class="tganime-fadein-trigger" target="_blank" οnclick="PTTSendClick('link','new-hero-item3','新英雄-列表-小图3');">
<img width="68" height="173" data-original="//game.gtimg.cn/images/yxzj/img201606/freehero/vertical/521.jpg" class="lazy" alt="海月"/>
<span class="hero_name tganime-fadein-child">海月</span>
</a>
</li>
<li>
<a href="/webplat/info/news_version3/15592/29030/29082/29084/m11740/202209/922524.shtml" class="tganime-fadein-trigger" target="_blank" οnclick="PTTSendClick('link','new-hero-item4','新英雄-列表-小图4');">
<img width="68" height="173" data-original="//game.gtimg.cn/images/yxzj/img201606/freehero/vertical/548.jpg" class="lazy" alt="戈娅"/>
<span class="hero_name tganime-fadein-child">戈娅</span>
</a>
</li>
"""
(1)(2)
第一步:提取出英雄苏烈的图片位置和名字
演示效果:
第二步:提取出多个英雄的图片位置和名字
这里只提供了最简单(最朴素)的方法,小伙伴可以试着改下,看是否能用循环呢?感兴趣的可以多是下
ready1=str1.find('data-original=')
begin1=str1.find('"',ready1)
end1=str1.find('"',begin1+1)
print(str1[ready1:end1+1])
alt1=str1.find("alt",end1)
end_alt1=str1.find('"',alt1+5)
print(str1[alt1+5:end_alt1])
ready2=str1.find('data-original=',end1)
begin2=str1.find('"',ready2)
end2=str1.find('"',begin2+1)
print(str1[ready2:end2+1])
alt2=str1.find("alt",end2)
end_alt2=str1.find('"',alt2+5)
print(str1[alt2+5:end_alt2])
ready3=str1.find('data-original=',end2)
begin3=str1.find('"',ready3)
end3=str1.find('"',begin3+1)
print(str1[ready3:end3+1])
alt3=str1.find("alt",end3)
end_alt3=str1.find('"',alt3+5)
print(str1[alt3+5:end_alt3])
(3)
第三步(选做):使用正则表达式来查找位置的方法,完成英雄的提取,正则的写法有很多
print()
print("正则方法:")
list1=re.findall("data-original=.+?.jpg\"",str1)
list2=re.findall("alt=.+?\"",str1)
for i in range(len(list1)):
list11=list1[i]
list22=list2[i]
print(list22[5:len(list22)-1])
print(list11[5:len(list11)])
三
(1)
实现凯撒密码的加密解密算法
str1=input("请输入要加密的明文:")
str2=""
number=eval(input("请输入移动位数"))
for char in str1:
str2+=chr(ord(char)+number)
print("加密后的密文为",str2)
(2)
(选做)试着去实现你喜欢的密码学算法
text=input("请输入明文:")
key=input("请输入密钥:")
#转换为大写字母,并去除空格和标点符号
text=text.upper().replace(" ","").replace(",","").replace(".","")
key=key.upper()
Etext = ""
for i in range(len(text)):
key_pos=i%len(key)
offset=ord(key[key_pos])-ord('A')
Echar=text[i]
if Echar.isalpha():
Etext+= chr((ord(Echar)-ord('A')+offset)%26+ord('A'))
else:
Etext+= char
print("密文为:",Etext)
实验截图
第一题
第二题
第三题
这一部分由于变动的太多就不提供实验截图了。
结语
这一部分内容还是蛮有趣的,uu们可以自己多试一试,很有意思的。但切记,不能提交上面的源码(至少变量名改下呗)