Python实验2.5.3 列表与字符串进阶
第1关:字符串基本操作任务1 字符串拼接 依次输入两个字符串赋值给s1和s2,并将s1中所有英文字母转换为大写后连接到s2后面,并将拼接的结果赋值给s3,输出s3的值。 提示:应用“+”运算和字符串的upper()方法。任务2 根据字符串的长度确定字符串输出重复次数 输入一个字符串赋值给s4,根据s4的长度来确定将s3重复多少次,重复运算结果赋值给s5,并输出s5的值。例如:输入“A1”, 如果s
第1关:字符串基本操作
任务1 字符串拼接 依次输入两个字符串赋值给s1
和s2
,并将s1
中所有英文字母转换为大写后连接到s2
后面,并将拼接的结果赋值给s3
,输出s3
的值。 提示:应用“+”
运算和字符串的upper()
方法。
任务2 根据字符串的长度确定字符串输出重复次数 输入一个字符串赋值给s4
,根据s4
的长度来确定将s3
重复多少次,重复运算结果赋值给s5,并输出s5
的值。例如:输入“A1”
, 如果s3
的值是123XTU
,则输出123XTU123XTU
。 提示:求字符串的长度用内置函数len()
,重复运算用“*”
任务3 访问字符串以及子字符串 输入一个长度为2字符串赋值s6
,判定s6
在s5
的第2至第11个字符(包含第11个字符)之间首次出现的位置与出现次数,若s5
的长度小于10,则表示从第2个字符到字符串末尾的子串。例如:输入“XT”
,若s5
的值是123XTU123XTU
,则输出“2 2”
,第2个到第11字符的子串是23XTU123XT
:表示:“XT”
在子串“23XTU123XT”
中首次出现的起始位置是2,总共出现了2次。 提示:本任务中需要用到字符串的切片运算:[m:n]
,出现位置与次数分别使用序列类型的共有方法:index()
和count()
任务4 字符串的替换 输入一个字符串赋值给s8
,将s5
中所有的数字符号"2"替换成存储在s8
中的字符串,并将替换结果赋值给s9
,输出s9
的值。例如:输入一个字符串“TO”
,s5
是123XTU123XTU
,则输出替换后的结果为:1TO3XTU1TO3XTU
。 提示:本任务中需要用到字符串的方法:replace()
任务5 字符串反转 将任务4中替换结果s9
反转,输出s9
反转后的值。例如:s9
中存储的是:1TO3XTU1TO3XTU
,则输出的反转结果是:UTX3OT1UTX3OT1
提示:本任务中需要用到字符串的切片运算:[::-1]
#字符串基本操作
#任务1代码
s1=input()
s2=input()
#Begin 填写“=”右侧表达式
s3=s2+s1.upper()
#End
print(s3)
#任务2代码
s4=input()
#Begin 填写“=”右侧表达式
s5=s3*len(s4)
#End
print(s5)
#任务3代码
s6=input()
c=0
#Begin 在Begin和End间填写代码
print(s5[1:11].index(s6),s5[1:11].count(s6))
#End
#任务4代码
s8=input()
#Begin 填写“=”右侧表达式
s9=s5.replace('2',s8)
#End
print(s9)
#任务5代码
#Begin 在Begin和End间填写代码
print(s9[::-1])
#End
第2关:列表基本操作
任务1 建立列表 输入一个表示姓名的字符串,建立一个只含有此字符串的列表lt1
,并输出lt1
的值,例如,输入字符串为“李海”
,则输出[“李海”]
任务2 加入元素 输入3个整数,分别代表数学,语文,英语的分数,生成列表lt2
,将列表lt2
加到lt1
后面,输出更新后的lt1
。例如,输入的整数为:90 79 100
,表示对应课程的分数,则输出:[“李海”,90,79,100]
提示:可以使用append()
,extend()
,insert()
和“+”
运算,但是要注意他们的差别
任务3 插入元素 从键盘输入一个数字字符串,并在列表lt1
的起始位置插入这个数字字符串,代表学号,输出lt1的值。例如:输入:“201705090345”
,输出lt1
的值为:[“201705090345”,“李海”,90,79,100]
提示:可以使用insert()在首元素前面进行插入。
任务4 列表的删除 找出列表lt1
中的最小的元素,在列表lt1
中删去此元素,删除后,再输出lt1
的值 提示:使用内置min()
函数求出lt1
中元素的最小值,用列表的方法remove()
或pop()
来移除此元素。也可以用内置函数del()
来删除指定位置的元素。注意参数:remove()
的参数是要删除的具体元素,而del()
和pop()
的圆括号中要填写整数,表示要删除的元素的索引号。
任务5 列表的反转与排序 将lt2
列表中的元素按从小到大的顺序排列输出,再将lt1
复制给lt3
,将lt3
反转输出。例如:lt2
的值是[90,79,100]
,则从小到大输出为[79,90,100]
,lt3
反转的结果为[100,90,“李海”,“201705090345”]
提示:本任务使用列表的方法有:copy()
,sort()
和reverse()
#列表基本操作
#任务1代码
s1=input()
#Begin
lt1=[]
lt1.append(s1)
#End
print(lt1)
#任务2 在begin和end间空白处填写代码
a=int(input())
b=int(input())
c=int(input())
#begin
lt2=[]
lt2.append(a)
lt2.append(b)
lt2.append(c)
lt1=lt1+lt2
#end
print(lt1)
#任务3 在begin和end间空白处填写代码
id=input()
#begin
lt1.insert(0,id)
#end
print(lt1)
#任务4 在begin和end间空白处填写代码
#begin
a=min(lt2)
b=lt1.remove(a)
#end
print(lt1)
#任务5 在begin和end间空白处填写代码
#begin
lt2.sort()
print(lt2)
lt3=lt1.copy()
lt3.reverse()
print(lt3)
#end
第3关:列表推导式
某轰炸机在ℎ(m)高空以v_0(m/s)的速度水平匀速飞行,到达A点时投下一枚无动力炸弹,不考虑空气阻力,在时间点t的纵坐标为 x=v0t,横坐标为y=h-1/2g*t**2;请生成等分时间点序列(如1s)对应的炸弹横坐标和纵坐标的列表xt,yt并输出。(g=9.8m/s^2)。 请基于列表推导式的方式编写代码。
from math import *
h=eval(input())#初始高度
v0=eval(input())#初始速度
g=9.8
delta=1 #delta为两点间时间间隔
tmax=sqrt(2*h/g)#炸弹落地时间
T=[ i*delta for i in
range(int(tmax/delta)+1) ]#生成时间点列表
a=[v0*j for j in T]
b=[h-(0.5*g)*(l**2) for l in T]
print(a)
print(b)
第4关:列表综合运用
任务1 字符串转换成列表和元组 输入一个含有空格的字符串赋值给ss1
,分别将其转换成列表和元组并依次输出。例如:输入:“My computer”
,输出:
['M', 'y', ' ', 'c', 'o', 'm', 'p', 'u', 't', 'e', 'r']
('M', 'y', ' ', 'c', 'o', 'm', 'p', 'u', 't', 'e', 'r')
-- *提示:**使用
list()
和tuple()
函数
任务2 字符串分割 将字符串ss1
以空格作为分离符号,将其分割为多个元素的列表赋值给ss2
。例如“My computer”
分割为列表输出是:["My","computer"]
。 提示:使用字符串的split()方法
任务3 将列表合并成字符串 首先将ss2
通过*
运算,重复3次,赋值给ss3
,然后用“-”
将各元素合成为一个字符串。例如,ss2
重复3次后,ss3
中元素为:["My","computer","My","computer","My","computer"]
,用“-”
作为连接符进行连接后的输出为:"My-computer-My-computer-My-computer"
提示:使用字符串的join()
方法。
#综合运用
#任务1 在begin和end间空白处填写代码
#begin
ss1=input()
ss2=list(ss1)
ss3=tuple(ss1)
print(ss2)
print(ss3)
#end
#任务2 在begin和end间空白处填写代码
#begin
ss4=ss1.split()
print(ss4)
#end
#任务3 在begin和end间空白处填写代码
#begin
ss5=ss4*3
str = "-";
print (str.join(ss5));
#end
第5关:字符串综合运用
信用卡号是否合法的判断规则为: a) 对给定的8位信用卡号码,如43589795,从最右边数字开始,隔一位取一个数相加,如5+7+8+3=23。 b) 将卡号中未出现在第一步中的每个数字乘2,然后将相乘的结果的每位数字相加。例如,对上述例子,未出现在第一步中的数字乘2后分别为(从右至左)18、18、10、8,则将所有数字相加为1+8+1+8+1+0+8=27。 c) 将上述两步得到的数字相加,如果得数个位为0,则输入的信用卡号是有效的。
请在指定位置完成函数的编写,判断用户输入的8位信用卡号码是否合法。
num=input()
#请在下面编写代码
# ********** Begin ********** #
b=[]
c=[]
u=[]
w=[]
x=[]
a=list(num)
a.reverse()
for i in range(0,len(a),2):
b.append(a[i])
for j in b:
j=int(j)
c.append(j)
d=sum(c)
#print(d)#测试a步骤是否正确
#----
for j in range(1,len(a),2):
u.append(a[j])
for i in u:
i=int(i)
i=i*2
w.append(i)
#----
for i in w:
v=i//10
z=i%10
x.append(v)
x.append(z)
s=sum(x)
#print(s)#测试第二步
#----
k=str(d+s)
if k[-1]=="0":
print('True')
else:
print('False')
for循环解法看似复杂但理解起来特别简单,适合初学者了解处理该类问题的套路。
最后求个三连吧^-^
更多推荐
所有评论(0)