Python基础之流程控制(if/while/for)

  • 学习目录
  • 流程控制
  • 注意事项
  • 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("你输了")
posted @ 2018-04-08 16:56  Mr.Chow  阅读(287)  评论(0编辑  收藏  举报