美文网首页
撩课-Python-每天5道面试题-第4天

撩课-Python-每天5道面试题-第4天

作者: 百川一页 | 来源:发表于2018-11-12 18:50 被阅读58次

    一. for循环和while循环中的else代表什么意思?

    当for循环和while循环顺利的遍历完成时, 就会执行else分支
    如果循环过程中, 碰到continue, 只要没有打断循环, 就会继续执行else
    例如:

    for i in range(1, 11):
       print(i)
       continue
    else:
       print("循环顺利执行完毕后", i) # 会打印
    
    for i in range(1, 11):
       print(i)
       break
    else:
       print("循环顺利执行完毕后", i) # 不会打印
    
    for i in range(1, 11):
       print(i)
       continue
       break
    else:
       print("循环顺利执行完毕后", i) # 猜会不会打印?
    

    二. break, continue, pass, return和exit分别代表什么意思?

    1. break和continue 一般应用在循环语句中
      break 代表是: 打断循环, 跳出循环体, 不再往下一个循环执行
      continue 代表是: 从当前位置结束本次循环, 继续下一次循环

    2. pass 一般应用场景, 在于保持代码的结构完整; 表示告诉系统这里有东西, 但暂时不做处理;
      例如: 在循环体中, 在类定义中, 在函数定义中

    for i in range(1, 11):
        pass
    
    class Sz:
        pass
    
    def test():
       pass
    
    1. return一般应用于函数中用于返回函数内部数据, 碰到return, 就不再继续往下执行;
    def test():
       print(1)
       return "itlike"
       print(2) # 此行代码不会被执行到
    
    print(test()) # 打印 itlike
    
    1. exit是指程序级别的退出, 无论放在哪个位置, 只要碰到这玩意, 就整个程序执行完毕, 不再继续往后执行

    三. 写循环代码时, for 和 while该如何选择, 以及有什么注意事项?

    1. 如果能够确定循环次数, 并且在内部需要用到索引, 或者循环数据, 则选择for循环;
      比如: 求出1到100之和
    2. 如果不能确定循环次数, 仅仅是一些特定条件, 则选择使用while循环
      比如: 让用户猜数字, 猜到对为止; 让用户输入密码, 输入到对为止
    3. 使用循环时, 注意避免死循环; 另外, 为了提升代码执行效率, 不要循环重复性的, 没意义的耗时操作
      例如: 我们在循环体内部用到1-1000之间的数值之和; 这个数据就在外面计算好, 然后在内部使用, 不要在循环体内部计算; 你计算1000遍, 结果都一样, 除下费电, 耗性能, 你图不到啥玩意

    四. 代码实现: 接收用户输入的两个数值a和b, 使用循环计算出a的b次方

    a = int(input("please input num a: "))
    b = int(input("please input num b: "))
    # 自行考虑容错
    result = 1
    for i in range(1, b + 1):
       result *= a
    print(result)
    

    五. 计算超长的两个整数192837465564738291 + 832465961738262之和(不要直接使用+法运算, 假装如果数值很长, 会产生溢出)

    # 算法思路:
    # 以字符串的形式, 模拟两个数据的加法运算
    # 重点在于: 考虑两个数据的长度, 以及进位处理
    
    a = 192837465564738291
    b = 832465961738262
    
    # 1. 将两个数值, 转换成对应的字符串
    a_str = str(a)
    b_str = str(b)
    
    # 2. 根据长度, 补全长度短的那个字符串, 在字符串前面, 用0补全
    a_str_len = len(a_str)
    b_str_len = len(b_str)
    
    zero_len = a_str_len - b_str_len
    if zero_len > 0:
        b_str = "0" * zero_len + b_str
    elif zero_len < 0:
        a_str = "0" * (- zero_len) + a_str
    
    # 3. 循环字符串, 从个位(数值最右侧), 开始相加运算
    # 并在计算同时, 更新进位, 累加到下次运算中
    result_str = ""
    carry_num = 0 # 进位, 默认为0
    for idx in range(len(a_str) - 1, -1, -1):
        tmp = int(a_str[idx]) + int(b_str[idx]) + carry_num
        result_str = str(tmp % 10) + result_str # 将单次计算结果拼接到结果字符串中
        carry_num = tmp // 10 # 更新进位
    
    print(result_str)
    

    相关文章

      网友评论

          本文标题:撩课-Python-每天5道面试题-第4天

          本文链接:https://www.haomeiwen.com/subject/adicfqtx.html