第一题
'''
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一
对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
前面一个数字是已经有的兔子对数,在前面一个是到这时候可以生的兔子对数,所以加起来就是兔子总对数
第一个月 1
第二个月 1
第三个月 1 + 1 = 2
第四个月 2 + 1 = 3
第五个月 3 + 2 = 5
'''
def fib(n):
if n == 1 or n == 2:
return 1
else:
return fib(n-1)+fib(n-2)
n = int(input('第几个月?'))
print(fib(n))```
第二题
'''
题目:判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到这个数,如果能被整除,
则表明此数不是素数,反之是素数。
'''
最开始的代码
a = list(range(101,201))
for i in range(100):
for j in range(2,i+101):
if a[i] % j == 0:
a.pop(i)
break
print('共 %d 个素数' % len(a))
print(a)
提示IndexError: list index out of range
思考结果:pop以后index个数变少于是会越界,于是修改代码
a = list(range(101,201))
n = 0
for i in range(100-n-1):
for j in range(2,i+101):
if a[i] % j == 0:
a.pop(i)
n += 1
break
print('共 %d 个素数' % len(a))
print(a)
还是越界??最后的答案也是错的?不懂
后来发现,循环的范围在一开始确定,再循环中更改是不会改变的,测试如下:
n = 0
for i in range(10 - n):
... n = n+1
...
i
9
n
10
然后我换了个方法,是对的
b = []
for i in range(101,201):
m = 0
for j in range(2,i-1):
if i % j == 0:
m = 1
break
if m ==0:
b.append(i)
print('共 %d 个素数' % len(b))
print(b)
网友评论