美文网首页ITS·黑客
python今天的编程练习

python今天的编程练习

作者: JEZAU | 来源:发表于2017-05-19 11:12 被阅读65次

    第一题

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

    相关文章

      网友评论

        本文标题:python今天的编程练习

        本文链接:https://www.haomeiwen.com/subject/dvqyxxtx.html