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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 牛客网专项练习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。


相关文章
|
Python
牛客网专项练习30天Pytnon篇第01天
牛客网专项练习30天Pytnon篇第01天
68 1
|
索引 Python
牛客网专项练习30天Pytnon篇第22天
牛客网专项练习30天Pytnon篇第22天
121 0
|
Python
牛客网专项练习30天Pytnon篇第04天
牛客网专项练习30天Pytnon篇第04天
87 0
|
Python
牛客网专项练习30天Pytnon篇第19天
牛客网专项练习30天Pytnon篇第19天
61 0
|
索引 Python
牛客网专项练习30天Pytnon篇第15天
牛客网专项练习30天Pytnon篇第15天
62 0
|
Python
牛客网专项练习30天Pytnon篇第28天
牛客网专项练习30天Pytnon篇第28天
110 0
|
存储 Python
牛客网专项练习30天Pytnon篇第21天
牛客网专项练习30天Pytnon篇第21天
63 0
|
索引 Python
牛客网专项练习30天Pytnon篇第16天
牛客网专项练习30天Pytnon篇第16天
87 0
牛客网专项练习30天Pytnon篇第27天
牛客网专项练习30天Pytnon篇第27天
76 0
|
Python
牛客网专项练习30天Pytnon篇第25天
牛客网专项练习30天Pytnon篇第25天
140 0