python学习测试题4及参考答案

1.append() 方法和 extend() 方法都是向列表的末尾增加元素,请问他们有什么区别?

比如:member.append(['竹林小溪', 'Crazy迷恋'])member.extend(['竹林小溪', 'Crazy迷恋']) 实现的效果一样吗?

答案:
append() 方法是将参数作为一个元素增加到列表的末尾。
extend() 方法则是将参数作为一个列表去扩展列表的末尾。

member1 = ["米兔"]
member2 = ["米兔"]
member1.append(['竹林小溪', 'Crazy迷恋'])
member2.extend(['竹林小溪', 'Crazy迷恋'])
print(member1)
print(member2)

最后输出结果

['米兔', ['竹林小溪', 'Crazy迷恋']]
['米兔', '竹林小溪', 'Crazy迷恋']

2.假设给定以下列表:

member = ['小甲鱼', '黑夜', '迷途', '怡静', '秋舞斜阳']

要求将列表修改为:

member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]

答案:

member.insert(1, 88)
member.insert(3, 90)
member.insert(5, 85)
member.insert(7, 90)
member.append(88)

3.如何将下边这个列表的’小甲鱼’修改为’小鱿鱼’?

list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]

答案:

list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
list1[1][2][0] = '小鱿鱼'

4.现在有两个列表,想合并为一个,请按照升序进行组合打印,再按照降序进行组合打印。

如输入:
list1=[1,3,5] list2=[2,4,6]

输出
list3=[1,2,3,4,5,6] #升序
list4=[6,5,4,3,2,1] #降序

答案

list1 = [1, 3, 5]
list2 = [2, 4, 6]
list3 = list1 + list2
list3.sort()  # 升序排列
list4 = list1 + list2
list4.reverse()  # 降序排列
print(list3)
print(list4)

5.列表的赋值 list2 = list1[:] 与 list2 = list1有何不同

示例:

list1 = [1, 3, 2, 9, 7, 8]
list2 = list1[:]
list3 = list1
print("list1排序前:")
print("list2:", list2)
print("list3:", list3)
print("list2排序后:")
list1.sort()
print("list2:", list2)
print("list3:", list3)

从上述示例代码可以看到在list1排序前,list2与list3进行不同的赋值操作后,都得到了相同的值。但在list1进行排序后,使用分片的方式得到的list2很有原则、很有格调,并不会因为list1的改变而改变,但list3就好像汉奸、墙头草,Ta跟着list1改变了。

list1排序前:
list2: [1, 3, 2, 9, 7, 8]
list3: [1, 3, 2, 9, 7, 8]
list2排序后:
list2: [1, 3, 2, 9, 7, 8]
list3: [1, 2, 3, 7, 8, 9]

其实Python的变量就像一个标签,就一个名字而已,贴哪是哪,指哪打哪
在这里插入图片描述
我们这里的list3=list1赋值后,list1与list3其实都是指向了同一段内存地址,只是换了一个别名,只是向同一个东西增加一个新的标签而已。而list2这样进行分片创建是重新开辟了一个新的数据进行存储的。

6.试写一个程序,要求每次从列表的末尾取出一个元素,并将这个元素插入到列表的最前边。

list1 = ['1', '2', '3', '4', '5']
print(list1)
list1.insert(0, list1.pop())
print(list1)

输出结果:

['1', '2', '3', '4', '5']
['5', '1', '2', '3', '4']

7.现有两个列表:

list1 = ['1.Just do it', '2.一切皆有可能', '3.永不止步', '4.Impossible is Nothing']
list2 = ['4.阿迪达斯', '2.李宁', '3.安踏', '1.耐克']

请利用这两个列表,生成一个list3列表:

list3=['1.耐克:Just do it', '2.李宁:一切皆有可能', '3.安踏:永不止步', '4.阿迪达斯:Impossible is Nothing']

答案:
有两种解答方法,分别为列表推导式写法与常规逻辑

list1 = ['1.Just do it', '2.一切皆有可能', '3.永不止步', '4.Impossible is Nothing']
list2 = ['4.阿迪达斯', '2.李宁', '3.安踏', '1.耐克']
list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]  # 列表推导式写法
list4 = []
for l1 in list1:
    for l2 in list2:
        if l2[0] == l1[0]:
            list4.append(l2 + ': ' + l1[2:])  # 常规逻辑
            break
print(list1)
print(list2)
print(list3)
print(list4)

输出结果:

['1.Just do it', '2.一切皆有可能', '3.永不止步', '4.Impossible is Nothing']
['4.阿迪达斯', '2.李宁', '3.安踏', '1.耐克']
['1.耐克:Just do it', '2.李宁:一切皆有可能', '3.安踏:永不止步', '4.阿迪达斯:Impossible is Nothing']
['1.耐克: Just do it', '2.李宁: 一切皆有可能', '3.安踏: 永不止步', '4.阿迪达斯: Impossible is Nothing']

python之字符串、列表、元组

8.系统里面有多个用户,用户的信息目前保存在列表里面,如:

users = ['root','westos']
passwd = ['123','456']

写一个程序实现用户登录,登录条件:

1)判断用户是否存在,若用户不存在,直接打印“用户{用户名}不存在
2)如果用户存在,判断该用户密码是否正确,若正确打印“{用户名}登录成功
2)如果密码不正确,打印“{用户名}登录失败:密码错误!”,总共有三次机会登陆

在这里插入图片描述
在这里插入图片描述
答案:

# 定义列表,用来记录用户名和密码
users = ['root', 'westos']
passwds = ['123', '456']
# 定义尝试登陆的次数
trycount = 0

# 判断尝试登陆次数是否超过3次
while trycount < 3:
    # 接收用户输入的用户名和密码
    inuser = input("用户名:")
    inpasswd = input("密码:")

    trycount += 1
    # 判断用户是否存在
    if inuser in users:
        # 先找出用户对应的索引值
        index = users.index(inuser)
        # 找出密码列表中对应的索引值的密码
        passwd = passwds[index]
        # 判断输入的密码是否正确
        if inpasswd == passwd:
            print(inuser + "登陆成功")
            break
        else:
            print(inuser + "登陆失败: 密码错误!")
    else:
        print(inuser + "用户不存在")
else:
    print("已经超过三次机会")

9.用列表的知识实现程序:10个人围成一圈开始报数,每次数到3的倍数的人退出,请输出退出顺序

 第一轮: 3 6 9     剩下:1,2,4,5,7,8,10
 第二轮: 2 7       剩下:1,4,5,8,10
 第三轮: 1 8       剩下:4,5,10
 第四轮: 5         剩下:4,10
 第五轮: 10        剩下:4
 第六轮: 4

答案:10个人要一直循环报数,而且头尾相接,如何设置循环体是是关键点。

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  # 将所有人放入一个列表
count = 0  # 设置一个变量,用于计算报数
j = 1  # 第几轮
while len(list1) > 1:  # 当数组中至少有2个元素时进行循环
    print("第" + str(j) + "轮:", list1)
    j = j + 1
    l1 = list1[:]  # 把原数组拷贝到新数组中,用于限制内层循环次数
    print("去除:", end='')
    for i in range(0, len(list1)):  # 内层循环开始,从第一个人开始报数
        count = count + 1  # 每报一次,count计数器加1
        if count % 3 == 0:  # 如果count能被3整除,则是报到3的人
            list1.remove(l1[i])  # 把报到3的人移除原数组,进行下一次循环
            print(l1[i], "", end='')
    print("")

print("最后留下", list1)

10.编写一个程序,输入以逗号分隔的数字序列,去除数字后的字符并打印生成包含每个数字的列表和元组。

假设向程序提供以下输入:
34岁,67年,55岁,33岁,12日,98年
则输出为:
['34', '67', '55', '33', '12', '98']
('34', '67', '55', '33', '12', '98')

答案:

list1 = ["34岁", "67年", "55岁", "33岁", "12日", "98年"]
list2 = []
for l in list1:
    list2.append("".join(list(filter(str.isdigit, l))))
print(list2)  # 列表
print(tuple(list2))  # 元组

提取字符串中的数字

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值