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
转载请注明出处,谢谢。
Python从题目中学习:range()和xrange()的更多相关文章
- Python从题目中学习:List comprehension
九九乘法表作业其实有更简单的做法,就是用列表推导式. ------------------------------------------------------------------------- ...
- Python从题目中学习:random() module
最近在给公司培训Python,布置了一道题: ----------------------------------------------------------------------------- ...
- Python中的range和xrange区别
range 函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列. range示例: >>> r ...
- python中的range与xrange
range 也是一种类型(type),它是一个数字的序列(s sequence of numbers),而且是不可变的,通常用在for循环中. class range(stop) class rang ...
- python开发_python中的range()函数
python中的range()函数的功能hen强大,所以我觉得很有必要和大家分享一下 就好像其API中所描述的: If you do need to iterate over a sequence o ...
- 实验比较python中的range和xrange
1 结论: 全用xrange,除非你需要使用返回的列表 2 实验一:性能对比 实验环境:win7 ,64位系统 python2.7 import time StartTime=time.time() ...
- python(47):range和xrange的区别和联系
range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列. 比如: >>> range(5)[0, 1, 2, ...
- 从题目中学习java语法
一.输入输出 1.输入圆的半径,计算并输出圆的周长和面积: import java.util.Scanner; public class zuoye01_circle { public static ...
- python的基本知识,range在python2.x中和python3.x中的区别
这些是最开始学习python时的笔记,今天整理一下,在这里记录一下. 各种基础代码解释 for key,item in enumerate(li): print(key,item) inp=input ...
随机推荐
- 配置ConvenientBanner时出现的问题
ConvenientBanner: compile 'com.bigkoo:convenientbanner:2.0.5' 找不到依赖库 classpath 'com.jfrog.bintray.gr ...
- 你会用Python做出装逼的东西吗
如果我回答:“用Python很牛逼,但不能做出装逼的东西”,那大家来学习“小白的Python入门教程 ”,还有多少意义? 所以,为了让装逼的小船升级为牛逼的巨轮,让大家学完“小白的Python入门教程 ...
- 数据库对象映射为java对象,不使用框架
方法: public static <T> List<T> processResultSetToList(ResultSet rs, Class<T> clazz) ...
- SQL Server 2005 控制用户权限访问表
转自:http://www.cnblogs.com/gaizai/archive/2011/07/14/2106617.html 一.需求 在管理数据库过程中,我们经常需要控制某个用户访问数据库的权限 ...
- js中的offsetWidth岁的BUG
---恢复内容开始--- 在js使用offsetWidth来操作控件的运动是会遇到: var oDiv = document.getElementById('div1') oDiv.style.wid ...
- OD调试篇8
那么今天需要破解的呢,是这样一款软件. 程序刚刚进去会发现一个nag弹窗 说没有注册,要花20美金才能注册.只有5天的限制期限可以用了 进去之后 点击help里的关于这款软件 也显示了这是一个 ...
- Smart210学习记录------nor flash驱动
nor flash驱动与nand flash驱动的差别不大,只是设置不同的结构体而已,, nor flash驱动代码: #include <linux/module.h> #include ...
- JSP EL表达式 与输入有关的内置对象
与输入有关的隐含对象有两个param和paramValues,用来取得用户的请求参数.在使用EL之前可以使用如下代码取得用户的请求参数: request.getParameter(String nam ...
- php建立MySQL数据表
<?php $connect = mysql_connect("127.0.0.1","root",""); mysql_select ...
- jsp打印页面 js代码
function doPrint() { bdhtml=window.document.body.innerHTML; sprnstr=""; //开始打印标识字符串有17个字符 ...