2.2 流程控制-for序列
for 循环 是一个结构,导致程序要重复一定的次数
<>
while 条件循环也是如此,当条件变为假(False),循环结束
for 循环 在序列,使用for 循环遍历
例:
In [1]: a = 'ABC'
In [2]: for i in a:
...: print i
...:
A
B
C
逗号“,”//逗号可以抑制换行符
In [3]: for i in a:
...: print i,
...:
A B C
range() 迭代生成一个列表
In [7]: range(1,10,3) //可以控制步径值
Out[7]: [1, 4, 7]
In [8]: range(1,10,)
Out[8]: [1, 2, 3, 4, 5, 6, 7, 8, 9]
例:
对列表做遍历
In [9]: for i in range(1,11):
...: print i,
...:
1 2 3 4 5 6 7 8 9 10
列表重写,另外的一种表达方式
print [i for i in range(1,11)]
这个方式称为列表重写,可以对 i元素进行操作
[i**2 for i in range(1,11)]
也可以加入条件
[i**2 for i in range(1,11) if i % 2 ! = 0]
加入到循环中
for i in [i**2 for i in range(1,11) if i % 2 ! = 0]:
print i,
例: 1+2+3+4……+100= 5050
sum = 0 //设置初始值
for i in range(1,101):
# sum = sum + i //每次循环,sum 加一次 i 的值
sum += i //更优的写法
print sum
xrange()返回的是一个对象,返回的不再数值,更多的时候这个东西不会产生值,就不会占用多余的值
<>
建议以后编写程序的时候,都使用这个
2.3 流程控制-for字典
遍历序列:将序列中的各个元素取出来。
-
直接从序列取值
-
通过索引来取值
注:“迭代”,指重复执行一个指令。
###遍历字典
In [23]: for k in dic1: //k,是便是字典里的key
...: print k
...:
a
c
b
e
d
In [24]: for k in dic1:
...: print k,dic1[k] //这样就能取值,values
...:
a 100
c 100
b 100
e 100
d 100
格式化的输出
In [25]: for k in dic1:
...: print "%s --> %s" % (k,dic1[k])
...:
a --> 100
c --> 100
b --> 100
e --> 100
d --> 100
dic1.iteritems() 和dic.items() 很像,不过, dic1.iteritems()这个返回的是对象,后者返回的是列表,同样也可以节省内存占用
<>
.itmes 会先拆分
In [32]: dic1.items()
Out[32]: [('a', 100), ('c', 100), ('b', 100), ('e', 100), ('d', 100)]
.iteritems 因为是对象,只有在调用的时候才会进行调用,减少了内存的占用
In [31]: dic1.iteritems()
Out[31]: <dictionary-itemiterator at 0x7fead56f9940>
案例
四则运算
In [33]: for i in xrange(1,10): //一层循环
...: for j in xrange(1,i+1): //内层循环
...: print "%sx%s=%s" % (j, i, j*i), //输出结果
...: print //输出换行符
...:
1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
理解:
-
一层嵌套,控制行数
-
二层嵌套,控制列数
- 第一次循环 i = 1 ,然后进入二层循环之后xrange就变为xrange(1,i+1=2),这里的 j 就只能等于 1 ,然后进行第一次输出 1+1=1(i+j=j*j),然后内层循环结束,print输出换行符
- 第二次循环 i = 2 ,然后进入二层循环,这时候的 j 分别等于 1,2(因为第一次循环的时候给了i + 2),同时这次的循环,让xrange变为的了 1,2+1(i+1),然后,当j = 1 的时候,输出的结果,就位 1 * 2 = 2
2.4 循环退出
else
for 循环如果政策结束,才会执行else
python标准模块:
- import 为插入模块
- sys 模块 方法 etix()退出
- time 模块 方法 sleep()
import time //插入一个时间模块
import time
for i in xrange(10):
print i
time.sleep(1) //使程序暂停1秒
else:
print "main end"
测试for循环如果不正常循环结束,是否会做else 判断
In [36]: for i in xrange(10):
...: print i
...: if i == 5:
...: break //退出循环
...: else:
...: print "main end"
...:
0
1
2
3
4
5
In [38]: for i in xrange(10):
...: print i
...: # if i == 5:
...: # break
...: else:
...: print "main end"
...:
0
1
2
3
4
5
6
7
8
9
main end
测试结果,的确如此
- contnue 跳出当前层的循环
- break //退出循环
- pass 占位
作业:
猜数字游戏
- 系统生成一个20以内的随机整数
- 玩家有6次机会进行猜猜看,每猜错都有反馈(猜大了,猜小了,猜对了-结束)
- 6次都猜中,反馈:猜对了,玩家赢了!!
- 否则系统赢了
程序理解:系统随机生成一个20以内的整数,然后输入一个数字与系统内的数字进行比较是否同样 随机模块
- random模块 随机方法randint()
答: 用python3 写的,总算弄好,不过貌似输入字符串是否为数字判断没做好,还有数字大过对应的数字也没有做判定,就这样吧。。将就将就了
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/11/22 0022 21:59
# @Author : Jason_Yan
# @File : 11-22.py
import random
print("猜数字小游戏开始了,请注意哦!!")
i = random.randint(1,20)
n = 0
m = 0
for yn in range(6):
num = int(input("请输入一个数字: "))
if num == i:
print("猜对了请继续!")
n += 1
continue
elif num > i:
print("猜大了,加油啊! ")
continue
m += 1
elif num < i:
print("猜小了,加油啊! ")
m += 1
continue
if n == 6:
print("都猜对了,真厉害")
else:
print("请再接再厉啊,本次你答对 %s,答错了%s" % (n,m))
2.5 流程控制-while
while 与 for 相比
-
for 循环用在用次数的循环上
-
while 循环用在有条件的控制上
-
while 循环,直到表达式变为假,才退出
-
while 循环,表达式是一个逻辑表达式,必须返回一个True 或者False
例:
死循环,while很容易写成一个死循环,下面这个就是一个死循环
while 1:
print 'hello'
- 键盘控制死循环
while True:
print 'hello'
input = raw_input("Please input something, q for quit: ")
if input == q:
break
变成的时候,不要使用内建函数,或者是模块作为变量,以免发生影响整个程序的运行
- 循环为假的时候
n = 0
x = ''
while x !='q': //第一次,x不等于字符串 q 时 打印 n,'hello'
print n,'hello'
x = raw_input("Please input something, q for quit: ") //脚本执行到这里的时候,每次都需要输入一个字符串,进行判断
if not x: //x 因为之前的语句,x都是有值存在的,not表示当 x 没有值的时候,while 就会将它视为 False
break
else: //和for 一样,当整个循环结束的时候,就会执行整个条件判断
print 'world'