撩课-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分别代表什么意思?
break和continue 一般应用在循环语句中
break 代表是: 打断循环, 跳出循环体, 不再往下一个循环执行
continue 代表是: 从当前位置结束本次循环, 继续下一次循环pass 一般应用场景, 在于保持代码的结构完整; 表示告诉系统这里有东西, 但暂时不做处理;
例如: 在循环体中, 在类定义中, 在函数定义中for i in range(1, 11): pass class Sz: pass def test(): pass
- return一般应用于函数中用于返回函数内部数据, 碰到return, 就不再继续往下执行;
def test(): print(1) return "itlike" print(2) # 此行代码不会被执行到 print(test()) # 打印 itlike
- exit是指程序级别的退出, 无论放在哪个位置, 只要碰到这玩意, 就整个程序执行完毕, 不再继续往后执行
三. 写循环代码时, for 和 while该如何选择, 以及有什么注意事项?
- 如果能够确定循环次数, 并且在内部需要用到索引, 或者循环数据, 则选择for循环;
比如: 求出1到100之和- 如果不能确定循环次数, 仅仅是一些特定条件, 则选择使用while循环
比如: 让用户猜数字, 猜到对为止; 让用户输入密码, 输入到对为止- 使用循环时, 注意避免死循环; 另外, 为了提升代码执行效率, 不要循环重复性的, 没意义的耗时操作
例如: 我们在循环体内部用到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)