在上节课中,我们提出一个问题,那要是重复的数字非常大呢?例如一百、一千甚至一万,那岂不是我们要创建一个有很多元素的列表?

别急,我们来认识一个新朋友:range()函数。
range()函数可创建一组连续增加的整数,工作方式类似切片,一般用在 for 循环中。
在Python2中返回的是一个整数列表,在Python3中返回的是一个迭代值。
所以,记得,在Python3.0当中,range()函数并不是真正的创建了一个数字列表。
函数语法如下:
range( start, stop [, step] )
参数说明:
start | 计数从 start 开始。默认是从 0 开始。 例如range(5)等价于range(0, 5); |
stop | 计数到 stop 结束,但不包括 stop。 例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5 |
step | 步长,默认为1。 例如:range(0, 5) 等价于 range(0, 5, 1) |
这下,循环多次的问题彻底解决了,我们来写一段代码试试,
要求从1数到10。下面这段代码对吗?
for num in range(10):
print(num)

答案是不对。
虽然完成10次循环,但是它并不是从1开始数的,是从0一直数到9,所以不满足我们的要求。

那下面这段代码呢?
for num in range(1,10):
print(num)

答案也不正确。

虽然这次从1开始数了,但是只数到了9,差一个呢。
正确答案应该是:
for num in range(1,11):
print(num)
再思考一下,如果我们想输出1-20之间,所有的偶数,应该怎么做呢?

for num in range(2,22,2):
print(num)1-20之间所有的偶数,最小值为2,最大值为20,所以我们需要把start设置为2,而end需要设置为大于20但是小于等于22的数字。(这里设置为21和22结果是一样的,但是其他的数字就不行,思考一下为什么)
偶数是2的倍数,前后两个偶数相差为数字2,所以,这里,我们把步长step设置为2.
输出结果如下:

那如果我想打印一个2的乘法表呢?

代码如下:
for num in range(1,10):
print("2 * %d = %d" %(num,2*num))
在语句:
print("2 * %d= %d" %(num,2*num))
中,每次循环,输出的结果是“2 * %d = %d”
这里,我们用了2个占位符,用了2种颜色用以区分。
第一个占位符,调用当前循环的num值。
第二个占位符,调用当前循环num的值乘以2的结果。
num的值是从1开始,一直到9,所以输出的结果也就是
2* 1 = 2
2* 2 = 4
2* 3 = 6….
难度再加大一点!
通过Python代码,输出九九表。

以为很难吗,其实代码只有4行:
for m inrange(1,10):
for n in range(1,m+1):
print('%d * %d = %d \t'%(m,n,m*n),end='')
print('')运行结果如下

在这里,我们定义了2个变量,一个是m,一个是n
我们写了2个for循环语句,并且,是在第一个for循环里面又加了第二个for循环,这叫做循环的嵌套。
m的取值从1开始,一直到9
n的取值,从1开始,一直到当前循环的m值
当m=1的时候,n只有一个取值,也是1,所以循环1次,print函数输出 1*1=1
当m=2的时候,n有2个取值,1和2,所以循环2次,print函数先输出2*1=2,然后输出2*2=4
当m=3的时候,n可以等于1,2,3,所以循环3次,print函数依次输出3*1=3,3*2=6, 3*3=9。
后面的计算以此类推。
\t表示一个空挡,相当于键盘上的Tab键,就是为啥你看到程序运行结果中公式是一个一个隔开的很整齐。

如果没有 \t 进行分割,你会看到如下的结果

end=””可以让输出不会自动分行,遇到end后面的字符串才会分行。
在这里,我们用了一个空字符串(就是直接打了一对引号),表示遇到空字符串我们才会另起一行。
那么什么时候会遇到空字符串呢?
大家注意看第二个print缩进的位置。
for m inrange(1,10):
for n in range(1,m+1):
print('%d * %d = %d \t'%(m,n,m*n),end='')
print('')第二个print明显不是第二个for语句的循环代码块,属于第一个for语句。它表示,当第二个for循环运行完了,就输出一个空字符串,这样,每次打完一个m值的计算,就能另起一行,打下一个m的运算了。主要是排版上好看易于理解。

















