牛客刷题之菜狗升职记(暑假版)

第一题

lists ``=` `[``1``, ``2``, ``3``, ``4``]
tmp ``=` `0
for` `i,j ``in` `enumerate``(lists):
  ``tmp ``+``=` `i ``*` `j
print``(tmp)

解题步骤:

        知识点:enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

        也就是说返回的值为: enumerate(lists)返回的是[(下标,元素),(下标,元素)]

结果为:tmp=01+12+23+34=20

第二题

class` `A(``object``):
  ``pass
 class` `B(A):  
 ``pass
 b ``=` `B()

选项为:

A isinstance(b, A) == True

B isinstance(b, object) == True

C issubclass(B, A) == True

D issubclass(b, B) == True

知识点:

        abc isinstance(object,classinfo),用于判断object是否是classinfo的一个实例,或者object是否是classinfo类的子类的一个实例,如果是返回True.

        issubclass(class,classinfo),用于判断class是否是classinfo类的子类,如果是返回True.

结果 D为错

第三题

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

解题步骤:

        知识点:特卡洛方法是一种利用随机数和概率统计理论进行数值计算的方法。简单来说,它通过生成大量的随机样本来估算某个问题的结果。

        比如我们想要计算一个复杂形状的面积,但无法用传统的几何方法求解。使用蒙特卡洛方法,我们可以在该形状内部随机生成大量点,并统计落在形状内部和外部的点的数量。然后,通过落在形状内部的点数与总点数的比例,乘以表示整个区域的面积,就可以估算出该复杂形状的面积。

        蒙特卡洛方法的优点是适用于各种复杂问题,不需要求解解析解,只需要生成随机样本并进行统计。通过增加样本数量,可以提高结果的准确性。

        这段代码是一个函数 foo(n),它接受一个参数 n,用来指定循环的次数。

        在该函数中,首先通过 random.seed() 初始化随机数生成器。然后定义了两个计数变量 c1c2,用于统计满足条件的点和不满足条件的点的数量。

        接下来使用一个循环来进行模拟。每次循环,生成两个随机数 xy,范围为 [0, 1),代表了一个二维平面上的一个点的坐标。然后计算该点到两个圆心的距离的平方,分别代表了该点与两个圆的关系。

  • r1 = x * x + y * y 表示该点与以原点为圆心的圆的距离的平方。

  • r2 = (1 - x) * (1 - x) + (1 - y) * (1 - y) 表示该点与以 (1, 1) 为圆心的圆的距离的平方。

        如果 r1r2 都小于等于 1,则说明该点落在两个圆内部,将 c1 加一;否则,将 c2 加一。

        最后,函数返回 c1 / c2 的结果,即满足条件的点的数量除以不满足条件的点的数量的比值。

        举个例子,假设 n 的值为 1000,表示进行 1000 次循环。函数会随机生成 1000 个二维平面上的点,并计算这些点与两个圆的关系。统计满足条件的点和不满足条件的点的数量,最后返回满足条件的点的数量除以不满足条件的点的数量的比值。

第四题

请问经过该编码的字符串的解码顺序是( )
urllib.quote(line.decode(``"gbk"``).encode(``"utf-16"``))

解题步骤:

        字符串编译的过程:gbk==>unicode==>utf16==>url解码

        字符串解码顺序为:url解码==>utf16==>unicode==>gbk

        题目中的代码是一个编码过程: 编码:decode() 解码:encode() url编码:urllib.quote()

        line.decode("gbk") 可知 line 是 gbk 编码的

编码过程:

        line -> 解码 gbk -> 编码 utf-16 -> 编码 url

        解码过程(与编码过程相反): 解码 url -> utf-16 -> gbk

第五题

        在python3.x执行下列选项的程序,不会抛出异常的是()

A

b = 1

def fn():

nonlocal b

b = b + 1

print(b)

fn()

B

tup = (('onion','apple'),('tomato','pear'))

for _,fruit in tup:

print(fruit)

C

a = [b for b in range(10) if b % 2 == 0]

print(b)

D

lis = [1,2,'a',[1,2]]

set(lis)

解题步骤:

        A: nonlocal关键字是用来在函数或者其他作用域中使用非全局变量。(简单的来说就是只能用在嵌套函数中,并且你的外层函数中定义了相关的局部变量,否则就会报错)

        B: 两次解包。第一次是for item in tuple,第二次是分别用 _ , fruit 对 item 解包[【将tup里的两个元组拆开分别赋值给_和fruit两个变量】。

        C: python3.x中,使用列表生成式,中间变量b在生成列表后被销毁,因此再次使用变量b会报错;

        D: 选项,集合元素不能是列表这类不可散列对象,因此会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值