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

1.在不考虑计算机运行资源(如内存)的限制,以下 python3 代码的预期运行结果是:(B)

import math
def sieve(size):
    sieve= [True] * size
    sieve[0] = False
    sieve[1] = False
    for i in range(2, int(math.sqrt(size)) + 1):
      k= i * 2
      while k < size:
        sieve[k] = False
        k += i
    return sum(1 for x in sieve if x)
print(sieve(10000000000))

A.455052510 

B.455052511 

C.455052512 

D.455052513

解析:   

       本题计算量较大可以尝试将数值减小,例如sieve(10)==4,sieve(100)==25,sieve(1000)==168;根据结果得知该题为求出100亿内的质数个数。判断n是不是素数,只需整除一遍2至n的算术平方根即可,如果出现整除的情况,则不是素数;可以认为因数是成对出现的,比如10就是分界点,所有成对的因数分布在10的左右,2到10的所有数就已经包含了所有可能的因数对。


2.下面的python3函数,如果输入的参数n非常大,函数的返回值会趋近于以下哪一个值:(B)

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

A.4 / 3

B.(math.pi - 2) / (4 - math.pi)

C.math.e ** (6 / 21)

D.math.tan(53 / 180 * math.pi)

解析:

        以xy坐标轴(0,0)和(1,1)为圆心分别画两个圆,x,y取值范围为0≤x≤1,0≤y≤1,r1=x²+y² ,r2=(1-x²)+(1-y²),求两圆相交阴影占总面积比例:c1/c2=2*(Π/4-1/2)/1*1-2*(Π/4-1/2)=Π-2/4-Π。


3.当使用import导入模块时,按python查找模块的不同顺序可划分为以下几种:

①环境变量中的PYTHONPATH

②内建模块

③python安装路径

④当前路径,即执行Python脚本文件所在的路径

其中查找顺序正确的一组是:(C)

A.①④②③ 

B.②①④③ 

C.②④①③ 

D.①②③④

解析:

       Python搜索模块的顺序为:内建模块>当前路径,即执行Python脚本文件所在的路径>环境变量中的PYTHONPATH>python安装路径,故答案为C。


4.下列程序打印结果为:(B)

import re
str1 = "Python's features"
str2 = re.match( r'(.*)on(.*?) .*', str1, re.M|re.I)
print(str2.group(1))

A.Python 

B.Pyth 

C.thon’s 

D.Python‘s features

解析:
      re模块正则匹配功能使用:re.match(正则表达式,要匹配的字符串,[匹配模式])。

正则表达式r'(.*)on(.*?).*'

r表示后面的字符串是一个普通字符串(比如\n会译为\和n,而不是换行符);

()符号包住的数据为要提取的数据,通常与.group()函数连用;

.匹配单个任意字符;

*匹配前一个字符出现0次或无限次;

?匹配前一个字符出现0次或1次;

(.*)提取的数据为str1字符串中on左边的所有字符,即Pyth;

(.*?)提取的数据为str1中on右边,空格前面,即's;

.group(0)输出的是匹配正则表达式整体结果;

.group(1) 列出第一个括号匹配部分;

.group(2) 列出第二个括号匹配部分。


5.以下这段代码的输出结果为:(D)

import numpy as np
a = np.repeat(np.arange(5).reshape([1,-1]),10,axis = 0)+10.0
b = np.random.randint(5, size= a.shape)
c = np.argmin(a*b, axis=1)
b = np.zeros(a.shape)
b[np.arange(b.shape[0]), c] = 1
print(b)

A.Hello World!

B.一个 shape = (5,10) 的随机整数矩阵

C.一个 shape = (5,10) 的 one-hot 矩阵

D.一个 shape = (10,5) 的 one-hot 矩阵

解析:

       repeat(np.arange(5).reshape([1,-1]), 10, axis = 0)首先np.arange(5),生成一数组[0,1,2,3,4],reshape([n,-1])意思是将原数组重组为n行x/n列的新数组,所以数组共有5个元素,重组为1行5列的数组,因为axis=0,所以是沿着横轴方向重复,增加行数,所以原数组增加10行,数组每个元素都+10;随机生成大小为a.shape的数组,数组元素为[0,5)区间范围的整数;a*b组成的新数组,给出每行最小值的下标;生成a.shape大小的全零数组;b.shape[0]表示b的行数,b[np.arange(10), c]=1表示np.arange(10)生成的数组中,所有c对应的位置全置为1。


牛客网专项练习30天Pytnon篇第28天_第1张图片

 

 

你可能感兴趣的:(牛客网,python,开发语言,后端)