欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-15 16:41:23
一. for循环和while循环中的else代表什么意思? 二. break, continue, pass, return和exit分别代表什么意思? 三. 写循环代码时, for 和 while该如何选择, 以及有什么注意事项? 四. 代码实现: 接收用户输入的两个数值a和b, 使用循环计算出a ......

一. 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)