Python入门练习题,字符串、列表、元组、字典、集合部分

题目:

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)

  • 7
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东篱把酒黄昏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值