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)

第一步:提取出英雄苏烈的图片位置和名字

演示效果:

已知字符串有多少单词Java 已知字符串s=whether the_d3


第二步:提取出多个英雄的图片位置和名字

已知字符串有多少单词Java 已知字符串s=whether the_python_02

这里只提供了最简单(最朴素)的方法,小伙伴可以试着改下,看是否能用循环呢?感兴趣的可以多是下
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)

实验截图

第一题

已知字符串有多少单词Java 已知字符串s=whether the_已知字符串有多少单词Java_03


已知字符串有多少单词Java 已知字符串s=whether the_字符串_04


已知字符串有多少单词Java 已知字符串s=whether the_字符串_05

第二题

已知字符串有多少单词Java 已知字符串s=whether the_字符串_06


已知字符串有多少单词Java 已知字符串s=whether the_已知字符串有多少单词Java_07


已知字符串有多少单词Java 已知字符串s=whether the_git_08

第三题

这一部分由于变动的太多就不提供实验截图了。

结语

这一部分内容还是蛮有趣的,uu们可以自己多试一试,很有意思的。但切记,不能提交上面的源码(至少变量名改下呗)