Python之作业(二)
作业
- 求100以内的奇数和
- 求100以内斐波那契数列
- 其数值为:1、1、2、3、5、8、13、21、34,从第三位数开始,每个数都是前两个数相加的和。
- 求斐波那契数列第101项
- 打印如下菱形
*
***
*****
*******
*****
***
*
1.求100以内的奇数和
需求分析:
1.需求分析:先取到100以内的所有奇数
2.求和
实现方法一:
昨晚下班之后开发做题,想半天没想明白,最后想了这么个办法,太蠢了。
代码分析:
1. a = [] # a 等于 一个空列表
2. for i in range(100): # 定义一个范围,定义范围之后想办法去奇数,可以先把范围缩小一点,比如10
3. if i % 2 == 1: # if判断一下i的值模2 是不是等于1,等于1就执行下一步,这一步是取奇数。
4. a.append(i) # a中插入i每趟执行循环的值
5. print(sum(a)) # 打印的时候再求和
实现方法二:
在做斐波那契数列的时候灵光一现,直接加等不就好了吗,脑子真是个好东西。
代码分析:
1. a = 0 # 定义一个变量,值是0
2. for i in range(1, 100, 2): # for 循环直接获取1到100的奇数也就是设置步长为2
3. a += i # i每趟循环的结果+=到a中
4. print(a) # 打印a的值
2.求100以内斐波那契数列
- 斐波那契数列规律:
- 其数值为:1、1、2、3、5、8、13、21、34
代码分析:
这个实现方法,其实并没有完全实现成功。
- a = 1 # 先定义原始值:1
- b = 1 # 先定义原始值:1
- count = 1 # 设置一个计数器,每次循环+1
- for i in range(10): # for 循环设置一个小点的范围10次
- print(count, a, b) # 循环体代码执行前先进行打印值
- a = a + b # 这里就是死循环的地方,想不明白如何进行赋值,主要思想是如何才能a + b = b + a
- b = a + b # 想半天没想出来,写了这么一个方法。
- count += 1
- 其数值为:1、1、2、3、5、8、13、21、34
也算是另类的实现方式吧,虽然觉得不合理
1. 1 1 # 第1趟代码执行,先打印,a和b的值都是1
2. 2 3 # 第2趟代码执行,a=a+b 所以a=2,b=a+b 所以b=3,依次类推
实现方法二
代码分析:
1. a = 1 # 先定义原始值:1
2. b = 1 # 先定义原始值:1
3. count = 1 # 设置一个计数器,每次循环+1
4. for i in range(100): # for 循环可以先设置一个小点的范围10次,前几次都对了再大的数也能对
5. if a < 100: # if判断 a的值是不是小于100
6. print(count, a) # 小于100进行打印
7. a, b = b, a + b # 这里就是整个代码的精髓部分了,我也没有想出来网上查了一下,但是我只看了这一步,a的值等于b,b的值等于a+b
9. count += 1 # 计数器每次执行+1
3.求斐波那契数列第101项
代码分析:
1. a = 1 # 先定义原始值:1
2. b = 1 # 先定义原始值:1
3. count = 1 # 设置一个计数器,每次循环+1
4. for i in range(100): # for 循环可以先设置一个小点的范围10次,前几次都对了再大的数也能对
5. a, b = b, a + b # 第2题做出来后这道题就好做了。
6. count += 1 # 计数器每次执行+1
7. print(count, a) # 打印值,在for循环体外,只打印最后一次的结果。
4.打印如下菱形
找思路时print直接打印的星号
自己最终的打印结果,只能做到这样了
老师的代码,我尝试进行分析一下。
代码分析:
1. n = 7
# 假定7是行数
2. e = n // 2
# e等于n//2=3,e等于3,3就是第一行的空格是3个。
3. for i in range(-e, e+1):
# for循环的范围 -e, e+1,获取菱形的空格数
4. if i < 0:
# if判断i的值小0
5. print(' ' * -i, end='')
# 打印空格-i的值
6. print('*' * (n - 2 * -i))
# 确定号的位置
7. else:
8. print(' ' * i, end='')
# 打印空格i的值
9. print(' ' * i, end='')
# 确定号的位置
示例:
这样我们就获取到整个菱形的空格数。