- 学习目录
- 流程控制
- 注意事项
- if(条件判断)
- while(循环)
- break / continue
- for(循环)
- 列表推导
- range() 及 xrange()
0x01 流程控制
- 类别
* 条件判断
-- 主要通过if语句完成
* 循环
0x02 注意事项
- 缩进
- 冒号
- 逻辑值(bool)
* True --- 非空,非零数
* False --- 0,None,空值- 循环
* while 循环
* for 循环
0x03 if语句
- 条件判断用法
* 单分支
* 多分支
-- if ... else ...
-- if ... elif ... else ...
- 语法
* 单分支
if 判断条件:
执行语句
- 语法
* 多分支
-- if ... else ...
if 判断条件:
执行语句
else:
执行语句
-- if ... elif ... else ...
if 判断条件:
执行语句
elif 判断条件:
执行语句
else:
执行语句
- Example: 判断两值大小(单分支之 if)
x = int(input("输入 x 的值为:"))
y = int(input("输入 y 的值为:"))
if x > y:
print("x 大于 y")
- Example: 判断两值大小(多分支之 if .. else ...)
x = int(input("输入 x 的值为:"))
y = int(input("输入 y 的值为:"))
if x > y:
print("x 大于 y")
else:
print("x 小于 y")
- Example: 判断数值值大小(多支循环之if ... elif ... else)
x = int(input("输入 x 的值为:"))
y = int(input("输入 y 的值为:"))
if x > y:
print("x 大于 y")
elif x < y:
print("x 小于 y")
elif x == y:
print("x 等于 y")
else:
print("更多判断方式")
0x04 while循环
- 用途
* 由条件控制
* 直到条件为假时,才推出循环; 表达式为逻辑表达式,返回值为True或False
- 语法
while 判断条件:
执行语句
PS:
避免写成死循环
- Example: 死循环及执行效率比较
# 死循环 ,条件为 1 或 0 执行效率高
while 1:
print("执行程序")
# 死循环 ,条件为 True 或 False 执行效率低
while True:
print("执行程序")
0x05 break/continue/pass
- break
* 跳出最近一级 for 或 while循环
* break 中止情况下, 后续程序体,不会执行- continue
* 循环执行程序体下一次迭代- pass
* 占位, 什么也不需要做
- Example: 判断从键盘获取的字符,根据判断进行执行程序
for x in range(2, 10):
for y in range(2, x):
if x % y == 0:
print(x, ' = ', x, '*', x//y)
break
else:
print(x, 'is a prime number')
- Example: 判断10以内的奇偶数
for num in range(2, 10):
if num % 2 == 0:
print("偶数的值为: {0}".format(num))
continue
print("奇数值为: {0}".format(num))
- Example: 判断从键盘获取的字符,根据判断进行执行程序
x = input("输入字符: ")
while x != 'q':
if x == "q":
print("退出程序操作")
break
elif x == "esc":
print("请输入 'q ' 退出程序")
continue
else:
print("输入有误,重新输入")
continue
- Example: pass用法
while 1:
pass
0x06 for循环
- 用途
* 主要序列(字符串、列表、元组、字典等)对象进行循环
- 语法
for item in sequence:
执行语句
- 结合字典方法,字典操作
# 遍历字典key
for k in a.keys():
print v
# 遍历字典value
for v in a.values():
print v
# 遍历字典key及value
for k,v in a.items():
print k,v
# 把字典遍历后,转换成列表对象
for k,v in a.iteritems():
print k,v
- for ... else ...
for item in sequence:
执行语句
else:
执行语句
- Example: 循环输出一组序列
# 循环输出1到9的数值
for i in range(1, 10):
print(i)
# 循环打印出列表元素
li = ['aa', 'bb', 'cc', 'dd', 'ff']
for i in li:
print(i)
- Example: 乘法口诀
# python2 打印乘法口诀表
for x in range(1, 10):
for y in range(1, x+1):
print("{0} * {1} = {2}").format(x, y, x * y), # 注意与 py2 区别
if x == y:
print(" ")
# python3 打印乘法口诀表
for x in range(1, 10):
for y in range(1, x+1):
print(("{0} * {1} = {2}").format(x, y, x * y), end="") # 注意与 py2 区别
if x == y:
print(" ")
0x07 循环嵌套
《 待完善 》
0x08 列表推导
1、列表 ---> [ ]
2、字典 ---> ( )
3、集合 ---> { }
- 列表
variable = [out_exp_res for out_exp in input_list if out_exp == 2]
out_exp_res: 列表生成元素表达式,可以是有返回值的函数
for out_exp in input_list: 迭代input_list将out_exp传入out_exp_res表达式中
if out_exp == 2: 根据条件过滤哪些值可以
- 字典
variable = ( out_exp_res for out_exp in input_list if out_exp == 2 )
- 集合
variable = { out_exp_res for out_exp in input_list if out_exp == 2 }
- Example: 求被 3 整除的数
multiples = [i for i in range(10) if i % 3 is 0]
print(multiples)
# Output: [0, 3, 6, 9]
- Example: 合并大小写,组合成新字典
mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
mcase_frequency = {
k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0)
for k in mcase.keys()
if k.lower() in ['a','b']
# Output: {'a': 17, 'b': 34}
- Example: key 和 value 相互交换
mcase = {'x': 5, 'y': 4000}
mcase_frequency = {v: k for k, v in mcase.items()}
print(mcase_frequency)
# Output: {4000: 'y', 5: 'x'}
- Example: 求数值的平方
squared = {x**2 for x in [8, 1, 6]}
print(squared)
# Output: set([64, 1, 36])
0x09 range() 及 xrange()
- range()
* 生成即占用内存空间
* 返回一个可迭代对象
* 用于列表或整型
* py2返回的是列表
- 语法
range(结束位置)
range(起始位置, 结束位置, 步长)
- Example: range() 用法
# 生成 0 到 9 的序列(不包含数值 10)
for num in range(10):
print(num)
- xrange()
* 不占用内存空间。需要时,才调用内存
* 生成一个生成器
* 返回可迭代对象
* py3已被range()替代
- 语法
xrange(结束位置)
xrange(开始位置, 结束位置, 步长)
- Example: xrange() 用法
# 只有结束位置
li = list(xrange(10))
for num in li:
print(num)
# 起始位置、结束位置
li = list(xrange(2, 10))
for num in li:
print(num)
# 起始位置、结束位置、步长
li = list(xrange(2, 10, 3))
for num in li:
print(num)
- Example: 猜数字(xrange在py2存在,py3只支持range)
import sys
import random
import time
a = random.randint(1, 10)
for i in range(1, 4):
num = int(input("输入数字:"))
second = 3 - i
if num == a:
print("你赢了")
sys.exit()
elif num > a:
print("猜大了")
print("你还有 {0} 次机会".format(second))
print("*" * 30)
time.sleep(1)
elif num < a:
print("猜小了")
print("你还有 {0} 次机会".format(second))
print("*" * 30)
time.sleep(1)
else:
print("你输了")