zoukankan      html  css  js  c++  java
  • 面试题-Python-001

    1、 下面的代码,输出结果是什么?

    def f(x, I = []):
        for i in range(x):
            I.append(i*i)
        print(I)
    
    
    f(2)
    f(3, [3, 2, 1])
    f(3)

    输出结果:

      [0, 1]
      [3, 2, 1, 0, 1, 4]
      [0, 1, 0, 1, 4]

    解析:1)该题是函数接收一个数字和数组;

        然后做循环,循环开始值0,步长为传入数字;每次循环,都将循环值平方后,追加到数组最后;

        循环结束后,输出数组。

       2)数组可以不传入,函数默认一个空数组。

          但是在 f(2) 后接着执行 f(3) 时,虽然 f(3) 同样未传入数组,但函数未将数组重新初始化,仍然在 f(2) 执行后的数组上继续追加。

          我果然没有好好看书,虽然原来的推测不错,但廖雪峰的函数的参数中的默认参数这节中,其实有更准确的说明:

             Python函数在定义的时候,默认参数I的值就被计算出来了,即[],因为默认参数I也是一个变量,它指向对象[]

                     每次调用该函数,如果改变了I的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。      

           所以,为了避免这种不确定性,默认参数必须指向 str、None 这样的不变对象!

    2、请将一个字符串倒叙输出:

    方法一:

    a = input('请输入长度20位以内的字符串:')
    b = ''
    for i in a:
        b = i + b
    print(b)

    方法二:

    a = input('请输入长度20位以内的字符串:')
    b = a[::-1]
    print(b)

    解析:1)方法一,利用了python中以下特性:字符串就是一个数组;可以对数组中的元素进行遍历;可以通过“+”直接拼接字符串。

         2)方法二,利用了切片功能,实现了字符串倒序。关于切片, [开始位置: 结束位置: 步长] 。(注意:步长为负数时,起止位置最好也用负数。)

    3、写一段代码,生成30个随机数,保证30个随机数的和为3200,随机性越强越好。

    import random
    sum = 3200
    avg = sum / 30
    b = []
    
    for i in range(15):
        n = int(avg * 2 * random.random())
        b.append(n)
        n = int(avg * 2 - n)
        b.append(n)
    
    b.pop(-1)
    
    for i in b:
        sum -= i
    
    b.append(sum)
    print(b)

    解析:1)本代码仅做参考,对题目中“随机性越强越好”的意图不是很理解。

         本题没有明确说明数据类型和取值范围,所以假定都必需是大于等于0的正整数。

       2)对于(1)中的随机性,我的理解是分布较为平均。所以采取了围绕平均值,两个一对的方式求随机数。

             3)因为要满足总和等于3200,且是按取正整数的思路来做随机,为了保证满足总和,从list中移除最后一个随机数,该随机数改为:用3200减去其余29个随机数的总和。

    4、求字符串‘welcome to china to study’中‘o’第三次出现时的下标是多少。

    方法一:

    str1 = 'welcome to china to study'
    count = 0
    l = 0
    if count <= 0:
        print('查询次数必须大于0,否则默认查询次数为1。')
        count = 1
    for i in range(len(str1)):
        if str1[i] == 'o':
            l += 1
        if l == count:
            print(i)
            break
    if l < count:
        print('查找字符未出现 %d 次' %count)

    方法二:

    str2 = 'welcome to china to study'
    count = 3
    beg = 0
    if count <= 0:
        print('查询次数必须大于0,否则默认查询次数为1。')
        count = 1
    for i in range(count):
        l = str2.find('o', beg)
        beg = l+1
        if (l == -1):
            break
    if l < 0:
        print('查找字符未出现 %d 次'.format(count))
    else:
        print(l)

    解析:1)方法一,利用了循环,若满足需要查找的字符时,计数器加1;

         因为指定查找第三次出现,所以计数器满足该条件时,输出当前下标,并跳出循环。

       2)方法二,利用自带的 find 函数 。

         因为该函数可以指定查找的开始、结束位置,所以循环相当于方法一中的计数器。

         每次找到符合要求的字符后,则在当前位置加1,作为下一次开始查找的位置。

       3)count变量非必需,只是为了方便查找不同次数做了参数化。

         针对查找次数为0或超出的情况,做了些预防措施。

    5、交换 a, b 两个变量的值

    a = 111
    b = 222
    print(a, b, sep = '	')
    a, b = b, a
    print(a, b, sep = '	')

    解析:1)python中,2个变量值交换的快捷写法:a, b = b, a

  • 相关阅读:
    Julia
    《风控策略笔记》之风控审批策略(三)--量化指标与策略调优
    《风控策略笔记》之风控审批策略(二)--决策引擎与策略调优
    《风控策略笔记》之风控审批策略(一)--前言与审批策略架构搭建和数据源
    schannel: next InitializeSecurityContext failed: SEC_E_ILLEGAL_MESSAGE错误
    从 kswapd0 进程CPU占用过高 到计算机内存详解
    pandas窗口函数--rolling
    请求行与相应行
    URI与URN与URL详解
    mysql索引详解
  • 原文地址:https://www.cnblogs.com/yjys/p/10696252.html
Copyright © 2011-2022 走看看