牛客网专项练习30天Pytnon篇第08天

1.执行以下程序,输出结果为:(B

sizes = ['S','M']
colors = ['white','black']
shirts = [(size,color) for color in colors for size in sizes]
print(shirts)

A.[('S', 'white'), ('S', 'black'), ('M', 'white'), ('M', 'black')]

B.[('S', 'white'), ('M', 'white'), ('S', 'black'), ('M', 'black')]

C.[('S', 'white'), ('M', 'black')]

D.[('white', 'S'), ('black', 'M')]

解析:

       列表生成式的执行结果等效于:       

sizes = ['S','M']
       colors = ['white','black']
       shirts = []
       for color in colors:
             for size in sizes:
                   shirts.append((size,color))
       print(shirts)

       因此输出结果为B选项。

       先循环colors层,再循环sizes层,就是列表推导式的最前面color和size是相反的,先循环出来的在元组第二个位置了 ,每个color对应两个size,出来顺序是(white,S),(white,M),(black,S),(black,M),然后组装时题目中顺序是左右调换。


2.执行下列选项的程序,会抛出异常的是:(B

A.

s1 = 'aabbcc'
s2 = 'abc'
count = s1.count(s2)
if count > 0 :
      print('s2是s1的子串')
else:
      print('s2不是s1的子串')

B.

s1 = 'aabbcc'
s2 = 'abc'
index = s1.index(s2)
if index > -1:
      print('s2是s1的子串')
else:
      print('s2不是s1的子串')

C.

s1 = 'aabbcc'
s2 = 'abc'
find = s1.find(s2)
if find != -1 :
      print('s2是s1的子串')
else:
      print('s2不是s1的子串')

D.

s1 = 'aabbcc'
s2 = 'abc'
if s2 in s1:
      print('s2是s1的子串')
else:
      print('s2不是s1的子串')

解析:

       四个选项都是判断s2是否为s1的子串,但B选项的str.index不同于其他方法,当查找不到子串时会抛出异常。

       count()函数没有匹配到对象返回0;

       index()函数没有匹配到对象报错value Error;

       find()函数没有匹配到对象返回-1;

       in 没有匹配到对象返回false。


3.执行下列选项代码,输出[1, {'age': 10}]的是:(D

A.

a = [1,{'age':10}]
b = a
a[1]['age'] = 12
print(b)

B.

a = [1,{'age':10}]
b = a[:]
a[1]['age'] = 12
print(b)

C.

a = [1,{'age':10}]
b = a.copy()
a[1]['age'] = 12
print(b)

D.

import copy
a = [1,{'age':10}]
b = copy.deepcopy(a)
a[1]['age'] = 12
print(b)

解析:

       根据题意选项中A选项是值复制,修改变量a的可变对象和不可变对象都会对变量b产生影响,BC选项是浅复制,修改变量a的可变对象会对b产生影响,D选项是深复制,修改可变和不可变对象对b都无影响。


4.下面代码运行后,a、b、c、d四个变量的值,描述错误的是:(D)

import copy
a = [1, 2, 3, 4, ['a', 'b']]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(5)
a[4].append('c')

A.a ==  [1,2, 3, 4, ['a', 'b', 'c'], 5]

B.b ==  [1,2, 3, 4, ['a', 'b', 'c'], 5]

C.c ==  [1,2, 3, 4, ['a', 'b', 'c']]

D.d ==  [1,2, 3, 4, ['a', 'b', 'c']]

解析:

       1) 执行b=a时,仅能产生对列表a的一个新的引用(别名),此时,a和b都是实际数据[1, 2, 3, 4, ['a', 'b']]的表示,真实数据只存储一份;

       2) 执行c = copy.copy(a)时,浅拷贝并生成新的列表对象,但需注意的是:浅拷贝中的可变对象(本题中为子列表['a','b'])会随原列表的变化而变化;

      3) 依照第2)条,执行a.append(5),a[4].append('c')时,对c的影响仅作用于可变对象,即['a','b'] -> ['a','b','c'];

      4) 执行d = copy.deepcopy(a)时,深拷贝并生成新的列表对象。深拷贝:拷贝后对象的逻辑状态相同,即仅是各自内存地址中所对应的值相同,而不是指向同一内存地址。故修改a不会影响d。


5.执行以下程序,当用户输入0时,输出结果为:(D)

dividend = 1
divide = int(input())
try:
    result = dividend / divide
    print(1, end=" ")
except ZeroDivisionError:
    print(2, end=" ")
except Exception:
    print(3, end=" ")
else:
    print(4)

A.1   2   

B.2   4   

C.2   3   

D.2

解析:

       在try...except...else结构中,当执行try程序块的语句时,若出现异常的语句,则不会继续执行try还未执行的代码,而是直接跳到except程序块,由于0不能作为分母,其抛出的异常对象属于异常类ZeroDivisionError,结果输出2,当异常被处理完时,会直接跳出except程序块,当try程序块没有出现异常时,不会执行except而执行else语句,出现异常时则执行except而不执行else,所以最终输出结果是2。


3085cb3dd3d044b59e14df5adc8617f4.jpeg

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

漫步桔田

编程界的一枚小学生!感谢支持!

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

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

打赏作者

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

抵扣说明:

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

余额充值