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

2018-11-12  本文已影响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)
上一篇下一篇

猜你喜欢

热点阅读