【Python】牛客网—软件开发-Python专项练习(Day1)

专栏文章索引:Python

根据语法的难度以及程序的复杂程度分为不同的等级:初级(8个)、中级(4个)、高级(2个)

可自行选择题目难度进行学习

目录

一、初级

二、中级

三、高级


一、初级

1.(单选)下面哪个是Python中不可变的数据结构?

A.set        B.list        C.tuple        D.dict

        可变数据类型:列表list、字典dict、集合set(能查询,也可更改)数据发生改变,但内存地址不变

        不可变数据类型:数值型(整型(int)、浮点型(float)、长整型(long)、布尔型(bool(True、False))、复数(complex))、字符串str、元组tuple(只能查询,不可更改)当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会改变

2.(单选)在python3中,下列程序结果为:

dicts = {'one': 1, 'two': 2, 'three': 3}
print(dicts['one'])
print(dicts['four'])

A.1,[]        B.1,{}        C.1,报错        D.1,None

在python3中,访问字典的元素主要是依靠字典的key,因此 print(dicts['one']) 的结果为 1;但如果用字典里没有的键访问数据,会报出错误信息

3.(单选)在python3中关键字 pass 的使用,则:

for i in range(5):
    if i == 2:
        pass
    print(i)

A.1,2,3,4,5        B.0,1,2,3,4        C.0,1,3,4        D.0,1,2,3,4,5

在Python3中,pass是空语句,是为了保持程序结构的完整性,不做任何事情,一般用做占位语句

因此程序打印的数字为 0,1,2,3,4,注意range(5) 生成的列表是从0开始到4,不包含5

4.(多选)Python中函数是对象,下列描述正确的有?

A.函数可以赋值给一个变量        B.函数可以作为元素添加到集合对象中        

C.函数可以作为参数值传递给其它函数        D.函数可以当做函数的返回值

在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量、可以作为元素添加到集合对象中、可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的。

详情请参考:

https://www.cnblogs.com/smallmars/p/6936871.html

5.(单选)以下哪一个不是Python支持的数据类型

A.char        B.int        C.float        D.list

在Python中没有char字符类型,Python中的数据类型有

1、数值类型

        a、整型(int)

        b、浮点型(float)

        c、长整型(long)

        d、布尔型(bool(True、False))

        e、复数(complex)

2、字符串(str)

3、元组(tuple)

4、列表(list)

5、字典(dict)

6、集合(set)

6.(单选)在Python3中,下列程序运行结果为:

tmp = [1, 2, 3, 4, 5, 6]
print(tmp[5::-2])

A.[5, 3, 1]        B.[6,4,2,0]        C.[6, 4, 2]        D.[2,4,6]

start_index是5,从正向第六个数开始。step是-2,负向每隔两步取一个。end_index省略,取到列表端点。

7.(单选)在Python3中,关于字符串的判断正确的是:

str1 = ''
str2 = ' '
if not str1:
    print(1)
elif not str2:
    print(2)
else:
    print(0)

A.0        B.1        C.2        D.None

在Python3中,逻辑运算符 not 表示非,字符串 str1 表示空字符, str2 虽然也表示空格字符,其长度是为1,因此在题目中会判断 str1 为空打印 1

8.(单选)执行以下程序,输出结果为()

a = 0 or 1 and True

print(a)

A.0        B.1        C.False        D.True

在Python中,布尔运算符的优先级是not>and>or。所以,根据运算符优先级,表达式会按照以下步骤进行计算:

  1. 1 and True:这是一个and运算,and运算符在遇到第一个False值时,返回这个False值;否则,返回最后一个表达式的值。因为1是True,而True也是True,所以整个表达式的结果为True。

  2. 0 or True:这是一个or运算,or运算符在遇到第一个True值时,返回这个True值;否则,返回最后一个表达式的值。因为0是False,而上一步计算结果是True,所以整个表达式的结果为True。

所以,a的值是True。

a = 1 and 2

print(a)  # 2
a = 0 and 2

print(a)  # 0
a = 1 or 2

print(a)  # 1
a = 0 or 2

print(a)  # 2

二、中级

1.(单选)在Python3中。程序语句结果为:

strs = 'abbacabb'
print(strs.strip('ab'))

A.'ab'        B.语法错误        C.'c'        D'ca'

        strip方法匹配两侧所有的不符合条件的字符(括号内指定字符串中的每个字符)

        'ab'表示的是一种集合,这里是指:[ab,ba,aa,bb,aaa,bbb,abb,baa]等;strs两端,只要是包含了上述集合中的任何一个,都删除。

        注意:是匹配两端的字符(串),如果大于一个,是字符的组合集合

下面是几个案例:

strs = 'acaba'
print(strs.strip('a'))

# cab
strs = 'acaba'
print(strs.strip('b'))

# acaba
strs = 'acaba'
print(strs.strip('abc'))

# 
strs = 'acaba'
print(strs.strip('abb'))

# c

abb跟ab一样,不要用重复的字符

2.(单选)在Python3中,有关字符串的运算结果为:

strs = 'I like python and java'
one = strs.find('n')
print(one)
two = strs.rfind('n')
print(two)

A.12,12        B.15,15        C.12,15        D.None,None

string.find(str, beg=0, end=len(string)),检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1,因此第一个返回结果为 12

string.rfind(str, beg=0,end=len(string) ),类似于 find() 函数,返回字符串最后一次出现的位置,如果没有匹配项则返回 -1,第二个返回结果为 15

简单地说:

  • find是从前往后找,返回成功匹配的第一个字符的位置索引
  • rfind也是从前往后找,但是返回最后一次成功匹配的字符的位置索引

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

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)

浅拷贝:切片,赋值,调用copy模块的copy方法

深拷贝:用copy模块的deepcopy方法

浅拷贝原数据改变时,拷贝数据也发生改变;深拷贝原数据改变时,拷贝数据不发生改变。

对于可变对象(列表和字典)来说,浅拷贝即开辟了新的内存地址,但是浅拷贝只能拷贝一层,即拷贝到‘age’,而这个‘age’仍然指向被拷贝对象指向的地址;所以被拷贝对象的age的值改变,拷贝对象的值也会改变;

3. copy.copy()指的就是浅拷贝;

4. deepcopy()是深拷贝,即将被拷贝对象的全部内容递归拷贝到新的内存空间中,即自立门户互不影响,所以被拷贝对象怎么改变值也不会影响拷贝对象。

注意:只能用于可变数据类型

4.(单选)What gets printed?()

kvps = { '1' : 1, '2' : 2 }
theCopy = kvps.copy()
kvps['1'] = 5
sum = kvps['1'] + theCopy['1']
print sum

A.1        B.2        C.6        D.10        E.An exception is thrown

同上一题

三、高级

 1.(单选)执行以下程序,输出结果为()

def outer(fn):
    print('outer')
    def inner():
        print('inner')
        return fn
    return inner


@outer
def fun():
    print('fun')

A.outer        B.inner        C.fun        D.因为没有调用任何函数,所以没有输出结果

装饰器的一个关键特性是,它在被装饰函数定义后被立即执行,因此运行装饰函数outer,输出结果为outer,内部函数inner没有调用,不会输出任何结果,被装饰函数同样也不会运行。

参考文章:装饰器函数

def outer(fn):
    print('outer')
    def inner():
        print('inner')
        return fn
    return inner


@outer
def fun():
    print('fun')


fun()

"""
outer
inner
"""

2.(单选)对于下面的python3函数,如果输入的参数n非常大,函数的返回值会趋近于以下哪一个值(选项中的值用Python表达式来表示)

import random 
def foo(n):   
        random.seed()
     c1 = 0
     c2 = 0
     for i in range(n):
        x = random.random()
        y = random.random()
        r1 = x * x + y * y
        r2 = (1 - x) * (1 - x) + (1 - y) * (1 - y)
        if r1 <= 1 and r2 <= 1:
           c1 += 1
         else:
           c2 += 1
    return   c1 / c2


  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我和程序有一个能跑就行

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

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

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

打赏作者

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

抵扣说明:

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

余额充值