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 ...
随机推荐
- iOS开发网络请求——大文件的多线程断点下载
iOS开发中网络请求技术已经是移动app必备技术,而网络中文件传输就是其中重点了.网络文件传输对移动客户端而言主要分为文件的上传和下载.作为开发者从技术角度会将文件分为小文件和大文件.小文件因为文件大 ...
- MySQL表类型和存储引擎版本不一致解决方法
使用的是老版本的mysql客户端Navicate 8 ,mysql 服务端用的是mysql5.6的版本,在修改版本引擎的时候出现版本不对; mysql error ‘TYPE=MyISAM’ 解决办法 ...
- 自己动手编译apache-tomcat-6.0.41-src源码
第一步:下载apache-tomcat-6.0.41-src 第二步:阅读BUILDING.txt.了解所需要的步骤. In order to build a binary distribution ...
- 第一章 ------ AutoYout介绍
1.使用自动布局的好处: (1)让两个视图进行尺寸匹配,使两个视图始终保持相同的宽度 (2)无论父视图如何改变,视图都可以相对于父视图居中 (3)拜放一行视图时将几个视图的底部对齐 (4)将两个视图偏 ...
- Mybatis-动态 SQL
MyBatis 的强大特性之一便是它的动态 SQL. 如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省 ...
- 《Android深度探索》(卷1)HAL与驱动开发读后感
第1章:安卓系统移植与驱动开发概述 这一章主要概括的介绍了安卓驱动开发和系统移植的主要内容,对安卓与Linux驱动做了一个总体的介绍.通过对第一章的学习,使我对Linux驱动开发有了一个感性的认识.在 ...
- 在Linux系统中如何设置APACHE服务器里的后台页面只允许某个IP地址访问
补充资料 本网络中使用LINUX服务器,web服务器是由APACHE搭建,IP地址为192.168.1.5,后台页面为/admin/login.jsp . 如何设置后台页面LOGIN.JSP只允许19 ...
- day17算法
http://www.360doc.com/content/14/0804/11/1073512_399302715.shtml
- ES TIPS
1,Testing Analyzers Especially when you are new to Elasticsearch, it is sometimes difficult to under ...
- JSBinding + SharpKit / 编译 Cs 成 Js
轻轻一点菜单:[JSB | Compile Cs to Js] 主要产出:StreamingAssets/JavaScript/SharpkitGeneratedFiles.javascript,你的 ...