zoukankan      html  css  js  c++  java
  • Python从题目中学习:range()和xrange()

    近期给公司培训Python,好好啃了啃书本,查了查资料,总结一些知识点。

    ------------------------------------------------------------------------------------

    ①:首先引入课后布置给同学们的作业吧,打印99乘法表:

    Print below multiplication table: 
    1*1=1
    1*2=2   2*2=4
    1*3=3   2*3=6   3*3=9
    1*4=4   2*4=8   3*4=12  4*4=16
    1*5=5   2*5=10  3*5=15  4*5=20  5*5=25
    1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36
    1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49
    1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64
    1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81

    -------------------------------------------------------------------------------------

    当然主要是考察大家是不是会用range()和循环。

    先学range():

    >>> range(1,10)# #表示从1到10(不包含10) 
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> range(1,10,2)#表示从1到10,步长为2(不包含10)
    [1, 3, 5, 7, 9]
    >>> range(10)#代表从0到10,不包含10
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    range()会了就比较简单了,两层循环就可以了。

    for firstNum in range(1,10):
        resultLine = ""
        for secondNum in range(1,firstNum+1):
            resultLine = resultLine+str(secondNum)+"*"+str(firstNum)+"="+str(firstNum*secondNum)+" "
        print resultLine
    
    #结果如下:
    #1*1=1
    #1*2=2 2*2=4
    #1*3=3 2*3=6 3*3=9
    #1*4=4 2*4=8 3*4=12 4*4=16
    #1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
    #1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
    #1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
    #1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
    #1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

    --------------------------------------------------------------------------------------

    ②:接下来,说说xrange()吧。

    range()和xrange()这两个基本上都是在循环的时候用。

    >>> range(10)
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> xrange(10)
    xrange(10)
    
    #查看类型
    >>> a = range(10)
    >>> b = xrange(10)
    >>> type(a)#range()生成的是一个List
    <type 'list'>
    >>> type(b)#xrange()则不会生成一个List
    <type 'xrange'>

    从上面可以看出,range()生成的是一个List,而xrange()不会生成一个List。

    >>> for i in range(1,10):
        print i
    
    >>> for i in xrange(1,10):
        print i
    
    #两种方式,输出结果一样    
    1
    2
    3
    4
    5
    6
    7
    8
    9

     -----------------------------

    #range
    >>> a = range(10)
    >>> a[0],a[3]
    (0, 3)
    >>> a[0]
    0
    >>> a[3]
    3
    #xrange
    >>> b = xrange(10)
    >>> a[0],a[3]
    (0, 3)
    >>> b[0]
    0 
    >>> b[3]
    3

    上面这两个输出的结果是一样的,但是实际上是有不同的。

    range会直接生成一个list对象;

    xrange则不会直接生成一个list,而是每次调用就返回其中的一个值。

    可以得出xrange做循环时,性能比range要好,特别是循环很大的时候。

    所以尽量用xrange可以提升性能,除非你是要返回一个列表。

    -----------------------------------------------------------------------------------

    ③:如果题目变一下呢?反向输出99乘法表。

    Print below multiplication table: 

    1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
    1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
    1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
    1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
    1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
    1*4=4 2*4=8 3*4=12 4*4=16
    1*3=3 2*3=6 3*3=9
    1*2=2 2*2=4
    1*1=1

    --------------------------------------------------------------------------------------

    乍一看不知道如何下手,其实range()也可以反向输出:

    >>> range(9,0,1) #返回空列表
    []
    >>> range(9,0,-1) #返回1-9元素的列表
    [9, 8, 7, 6, 5, 4, 3, 2, 1]

    那么题目就很简单了:

    for firstNum in range(9,0,-1):
        resultLine = ""
        for secondNum in range(1,firstNum+1):
            resultLine+="%d*%d=%d"%(secondNum,firstNum,firstNum*secondNum)+" "
        print resultLine
    
    #
    #1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
    #1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
    #1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
    #1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
    #1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
    #1*4=4 2*4=8 3*4=12 4*4=16
    #1*3=3 2*3=6 3*3=9
    #1*2=2 2*2=4
    #1*1=1

    转载请注明出处,谢谢。

  • 相关阅读:
    4.qml-ECMAScript(Array对象、Math对象)
    3.qml-ECMAScript_03(Object基类对象、String对象)
    2.qml-ECMAScript_02(原始值类型、通用转换方法)
    ORA-00001: 违反唯一约束条件(SOLEX.SYS_C0012537) --解决方法
    macOS 系统打开和退出文件夹(cd命令)
    macOS 系统下node安装和环境配置(通过node官网)
    macOS 系统报错:zsh:command not found :npm
    macOS 系统更新node老是不成功
    macOS 系统上升级 Python
    maxOS 系统更新node版本
  • 原文地址:https://www.cnblogs.com/dzblog/p/3920222.html
Copyright © 2011-2022 走看看