1.计算字符串中子串出现的次数。
2.一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
3.请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母,继而判断是星期几。
4.按相反的顺序输出列表的值。
5.列表转换为字典。i = [‘a’, ‘b’] l = [1, 2], {‘a’: ‘b’, 1: 2}。
6.统计一下所有数字出现的个数[1,2,1,2,3,3,3,3]。
7.打印歌曲列表 songslist 中的曲目。歌曲列表中有4首歌,播放到每首时显示对应歌手名字。
8.假定有下面的列表:names = [‘fentiao’,‘fendai’,‘fensi’,‘apple’],输出结果为: ‘I have fentiao, fendai, fensi and apple.’。
9.用列表来实现栈的工作原理:入栈、出栈、查看栈顶元素、栈的长度、栈是否为空。注意:空栈不能出栈,且此时无栈顶元素。
10.元素分类:有如下值集合[11,22,33,44,55,66,77,88,99,90], 将所有大于66的值保存至字典的第一个key中,将小于66值保存至第二个key的值中。
11.输出商品列表,用户输入序号,显示用户选中的商品。商品 li = [“手机”, “电脑”, “鼠标垫”, “游艇” ],a. 允许用户添加商品b. 用户输入序号显示内容。
12.有两个列表:l1 = [11, 22, 33],l2 = [22, 33, 44],a. 获取内容相同的元素列表,b. 获取l1中有, l2中没有的元素列表。c. 获取l2 中有,l1中没有的元素列表。d. 获取l1 和 l2 中内容都不同的元素。
13.转换练习:a. 将字符串 s = "alex"转换为列表,b. 将字符串s = "alex"转换为元组,c. 将列表li = [“alex”, “seven”]转换为元组,d. 将元组 tu = (“Alex”, “seven”)转换为列表。
16.输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。
17.假设有两个字符串s1和s2,计算通过增添、删除、替换三种操作后,从s1转变为s2所需要的操作次数。
18.请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
19.输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
# 1.计算字符串中子串出现的次数。
a = 'shgoerohowaijsdgblsnabafnfafaabsaajabajifjfjvnblks;abaajsorfja;bbabpjfabajpfirbnbpajigjaba'
b = 'aba'
print(a.count(b, 0, len(a)))
# 2.一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
c = [12345, 12321, 45654, 78987, 14741, 25825, 36936]
for i in c:
if i // 10000 % 10 == i % 10 and i // 1000 % 10 == i // 10 % 10:
print(str(i), '是回文数')
else:
print(str(i), '不是回文数')
# 3.请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母,继而判断是星期几。
def function1():
d = input('请输入星期几的第一个字母')
# python中没有switch,一般用字典代替switch
week = {'M': 'Monday', 'T': 'Tuesday', 'W': 'Wednesday', 'Th': 'Thursday', 'F': 'Friday', 'S': 'Saturday',
'Sn': 'Sunday'}
if d.upper() == 'M':
print('{}代表{}'.format(d, week[d.upper()]))
elif d.upper() == 'T' or d.upper() == 'S':
e = input('请输入第二个字母:')
if e == 'h':
print('{}代表{}'.format(d + e, week['Th']))
elif e == 'n':
print("{}代表{}".format(d + e, week['Sn']))
elif e == 'u' and d.upper() == 'T':
print('{}代表{}'.format(d, week['T']))
elif e == 'a' and d.upper() == 'S':
print("{}代表{}".format(d, week['S']))
else:
print('有错误')
elif d.upper() == 'W':
print('{}代表{}'.format(d, week['W']))
elif d.upper() == 'F':
print('{}代表{}'.format(d, week['F']))
else:
print('找不到是星期几')
function1()
# 4.按相反的顺序输出列表的值
f = ['a', 1, 2, 'b', 3, 'c']
f.reverse() # 把列表给反向了,没有返回值
print(f)
# 5.列表转换为字典。i = ['a', 'b'] l = [1, 2], {'a': 'b', 1: 2}
g, h, j = ['a', 'b'], [1, 2], {}
i_ = g + h
for i in range(0, 4, 2):
j[i_[i]] = i_[i + 1]
print(j)
# 6.统计一下所有数字出现的个数[1,2,1,2,3,3,3,3]
k = [1, 2, 1, 2, 3, 3, 3, 3]
print(k.count(1), k.count(2), k.count(3))
# 7.打印歌曲列表 songslist 中的曲目。歌曲列表中有4首歌,播放到每首时显示对应歌手名字。
songlist = {1: 'abc', 2: 'efg', 3: 'hij', 4: 'klm'}
print(songlist[1], songlist[2], songlist[3], songlist[4]) # 就是练习字典的取值,我懒得写循环if什么的了
# 8.假定有下面的列表:names = [‘fentiao’,‘fendai’,‘fensi’,‘apple’],输出结果为: ‘I have fentiao, fendai, fensi and apple.’
names = ['fentiao', 'fendai', 'fensi', 'apple']
print('I have {},{},{} and {}.'.format(names[0], names[1], names[2], names[3]))
# 9.用列表来实现栈的工作原理:入栈、出栈、查看栈顶元素、栈的长度、栈是否为空。注意:空栈不能出栈,且此时无栈顶元素
list_zhan = [] # 栈
def Stackempty(): # 判断栈是否为空
if len(list_zhan) == 0:
return 0
else:
return 1
def push(tem): # 压栈
list_zhan.append(tem)
def pop(): # 弹栈
if Stackempty() == 0:
print('栈空')
return
else:
return list_zhan.pop(-1)
def get(): # 取栈顶元素
if Stackempty() == 0:
print('栈空')
else:
return list_zhan[-1]
def get_len(): # 得到栈的长度
return len(list_zhan)
# 10.元素分类:有如下值集合[11,22,33,44,55,66,77,88,99,90], 将所有大于66的值保存至字典的第一个key中,将小于66值保存至第二个key的值中
mm = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
mmm = {1: [], 2: []}
for i in mm:
if i <= 66:
mmm[1].append(i)
else:
mmm[2].append(i)
print(mmm)
# 11.输出商品列表,用户输入序号,显示用户选中的商品。商品 li = ["手机", "电脑", "鼠标垫", "游艇" ],a. 允许用户添加商品b. 用户输入序号显示内容
li = ["手机", "电脑", "鼠标垫", "游艇"]
def ooo():
print(li)
oo = input(r'输入序号:(从一开始),如果输入‘w''会添加商品,输入‘m''会结束')
if oo == 'm':
return
elif oo == 'w':
li.append(input('输入要插入的东西:'))
ooo()
elif oo.isdigit() and 0 <= int(oo) <= len(li) - 1:
print(li[int(oo)])
ooo()
else:
print('error')
ooo()
ooo()
# 12.有两个列表:l1 = [11, 22, 33],l2 = [22, 33, 44],a. 获取内容相同的元素列表,b. 获取l1中有, l2中没有的元素列表。c. 获取l2 中有,l1中没有的元素列表。d. 获取l1 和 l2 中内容都不同的元素
li11, li22, li_tem1, li_tem2, li_tem3 = [11, 22, 33], [22, 33, 44], [], [], []
for i in li11:
for j in li22:
if j == i:
li_tem1.append(j) # a
if j not in li11 + li_tem3:
li_tem3.append(j) # c
if i not in li22:
li_tem2.append(i) # b
print('a:{}\nb:{}\nc:{}\nd:{}'.format(li_tem1, li_tem2, li_tem3, li_tem2 + li_tem3))
# 13.转换练习:a. 将字符串 s = "alex"转换为列表,b. 将字符串s = "alex"转换为元组,c. 将列表li = ["alex", "seven"]转换为元组,d. 将元组 tu = ("Alex", "seven")转换为列表。
str_s = 'alex'
li_str = ["alex", "seven"]
tu_str = ("Alex", "seven")
print(list(str_s)) # a
print(tuple(str_s)) # b
print(tuple(li_str)) # c
print(list(tu_str)) # d
# 16.输入两个字符串,从第一字符串中删除第二个字符串中所有的字符
str_aa = input('输入第一个字符串:')
str_bb = input('输入第二个字符串:')
str_sfj = list(str_aa)
str_see = ''
for i in str_bb:
while i in str_sfj:
str_sfj.remove(i)
for i in str_sfj:
str_see = str_see + i
print(str_see)
# 17.假设有两个字符串s1和s2,计算通过增添、删除、替换三种操作后,从s1转变为s2所需要的操作次数
# 解析:采用下标匹配的方法,s1,s2长度不相等:需要操作的次数是s2的长度加1。s1,s2长度相等:需要操作的次数是s2的长度
s1 = 'avdhpwf6fwefojfm vb '
s2 = 'haofcn a4\ 24e'
new = [i for i in s1]
for i in range(0, len(new)):
new[i] = s2[i]
s1 = ''
for i in new:
s1 += i
print(s1)
# 18.请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy
st110 = 'We Are Happy '
print(st110.replace(' ', '%20'))
s1 = s1[0:len(s2)]
# 19.输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba
# 解析:python不需要swap函数,a,b=b,a就是swap的功能
count = 0
str_19 = 'ahgief' # 输入的字符串
list_str = list(str_19) # 把输入的字符串转换为列表,方便不同位置的字符交换位置
tem_list = ['' for i in str_19] # 这是用于存储排列出来的字符串的列表
lock_str19 = ['unlock' for i in str_19] # 锁,如果一个位置的字符被确定了,那么就给它加一个锁,加了锁之后下一次递归时,不能使用加了锁的位置(锁住的是位置,不是元素)
def function_19(index): # 参数index是list_str的下标,如果str_19有五个字符,那么会有5层递归,第一层递归负责确定第一个位置的元素是多少,每一层的index都会从0到5遍历一次
global count
if index == len(list_str): # 如果下标等于字符串的长度,说明已经确定的一种排列,这时候就可以把这一种排列打印出来了
count += 1
print(''.join(tem_list), count) # str.join(sequence)是把一个序列(sequence)以str为连接符组合成一个新的字符串
return # 有没有return都行,但是加上return可以在打印完一种排列之后不再执行下面的for循环,可以提高效率。
for i in range(0, len(str_19)): # 在每一层i都是从0开始逐个遍历,目的是寻找没有加锁的位置,如果找着没有加锁的位置,那这个位置就会被固定在这一层,并加锁不让下一层继续使用
if lock_str19[i] == 'unlock': # 如果i所指的位置没有加锁,说明这个位置可以被这一层使用
tem_list[index] = list_str[i] # 因为i所指的位置没有加锁,所以i所指的位置被这一层使用,(index代表层,如果index=0,就说明现在是在第0层,以此类推)
lock_str19[i] = 'lock' # 第i个位置被使用了就要向第i个位置加锁,这样下一层就不能使用这个位置的元素了
function_19(index + 1) # 第index层确定了元素之后就要去下一层,以确定下一层的元素
lock_str19[
i] = 'unlock' # 如果从function_19(index+1)跳出来了,就说明第i个位置已经被使用完成了,并且完成了一种排列,这时候就可以解开这个位置的锁了,以供下一种排列所使用
function_19(0)