一、入门实战第一弹解答
入门实战第一弹问题回顾:
计算1,3,5…97,99所有数字的总和
解法1:while 循环语句
sum = 0
i = 1
while (i <= 100):
sum = sum + i
i = i + 2
print(sum)
详解:
首先初始化了两个变量 sum = 0,i = 1
sum 储存所有 i 的总和,i 表示当次循环加入 sum 中的数
while (i <= 100) 表示:该 while 循环语句的循环条件是 i <=100
sum = sum + i 表示:将当次循环中的 i 加入 sum 中
i = i + 2 表示:i 每次递增2
print(sum) 表示:将最后 sum 的值当作结果输出
解法2:for 循环语句
sum = 0
for i in range(1, 100, 2):
sum = sum + i
print(sum)
详解:
for i in range(开始/左边界, 结束/右边界, 步长)
for 循环语句与 while 循环语句有异曲同工之处,使用 for 循环语句可以使语句更加简洁明了
在 for 循环语句中的一行代码:
for i in range(1, 100, 2):
可以代替 while 循环语句中的三行代码:
i = 1
while (i <= 100):
i = i + 2
可别小看了这两行代码的区别,在循环次数达到上万次时,for 循环语句通过底层代码的优化可以大大减少运行时间
解法3:def 函数递归
def getsum (i):
if (i <= 1):
return 1
else:
return i + getsum(i-2)
sum = getsum(99)
print(sum)
详解:
首先我们定义了一个递归函数 getsum(i) :
def getsum (i):
if (i <= 1):
return 1
else:
return i + getsum(i-2)
我们可以将 getsum(99) 带入到函数中来理解它的作用:
由代码可知,当传入参数 i > 1 时,返回值为 i + getsum(i-2),将会不断地调用函数自身
第一次调用函数:getsum(99)
第二次调用函数:99 + getsum(97)
第三次调用函数:99 + 97 + getsum(95)
第四次调用函数:99 + 97 + 95 + getsum(93)
第五次调用函数:99 + 97 + 95 + 93 + getsum(91)
………………
第五十次调用函数:99 + 97 + 95 + 93 + …… + getsum(1)
由代码可知,当传入参数 i <= 1 时,返回值为 1,不再继续调用函数
将 getsum(1) 用1代替后,就可以得出最终答案
二、入门实战第二弹
通过上一次实战的学习和实践,相信大家都对这三种方法有了深入的理解
接下来我们会通过一道类似的题目巩固这些知识点:
计算1至100之间所有质数的总和
postscript:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
拓展:判断10~20内所有数字是否是质数的方法:
for num in range(10,20): # 迭代 10 到 20 之间的数字
for i in range(2,num): # 根据因子迭代
if num%i == 0: # 确定第一个因子
j=num/i # 计算第二个因子
print ("%d 等于 %d * %d" % (num,i,j))
break # 跳出当前循环
else: # 循环的 else 部分
print (num, "是一个质数")
运行样例:
这里的 else 语句有更高级的用法,想深入了解的同学可以看 这里