2.2 流程控制-for序列 2.3 流程控制-for字典 2.4 循环退出 2.5 流程控制-while

本文深入讲解Python中的for和while循环控制结构,包括序列遍历、字典遍历、循环退出机制及条件控制,并通过实例演示如何运用这些控制结构解决实际问题。

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

理解:

  • 一层嵌套,控制行数

  • 二层嵌套,控制列数

  1. 第一次循环 i = 1 ,然后进入二层循环之后xrange就变为xrange(1,i+1=2),这里的 j 就只能等于 1 ,然后进行第一次输出 1+1=1(i+j=j*j),然后内层循环结束,print输出换行符
  2. 第二次循环 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 占位

作业:

猜数字游戏

  1. 系统生成一个20以内的随机整数
  2. 玩家有6次机会进行猜猜看,每猜错都有反馈(猜大了,猜小了,猜对了-结束)
  3. 6次都猜中,反馈:猜对了,玩家赢了!!
  4. 否则系统赢了

程序理解:系统随机生成一个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'

转载于:https://my.oschina.net/nova12315/blog/2911579

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值