ITS·黑客

python今天的编程练习

2017-05-19  本文已影响65人  JEZAU

第一题

'''
题目:古典问题:有一对兔子,从出生后第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)

上一篇下一篇

猜你喜欢

热点阅读