Python for 循环语句

Python for循环可以遍历任何序列的项目,如一个列表、元祖或者一个字符串。

  • 循环是一个结构,导致程序要重复一定的次数。
  • 条件循环也是如此,当条件变为假,循环结束。

语法:

for循环的语法格式如下:

for iterating_var in sequence:
   statements(s)

遍历循环一个字符串:

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

遍历循环一个列表:

In [4]: list1 = [1,2,3,4,5]

In [6]: for i in list1:
   ...:     print i,
   ...:     
1 2 3 4 5

range 函数:

函数可创建一个整数列表,一般用在 for 循环中

函数语法

range(start, stop[, step])

参数说明:

start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
end: 计数到 end 结束,但不包括 end。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

生成一个range函数:

>>>range(10)        # 从 0 开始到 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11)     # 从 1 开始到 11
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5)  # 步长为 5
[0, 5, 10, 15, 20, 25]
>>> range(0, 10, 3)  # 步长为 3
[0, 3, 6, 9]

Xrange 函数

xrange() 函数用法与 range 完全相同,所不同的是生成的不是一个数组,而是一个生成器。 xrange不会占用太多的资源,只是产生一个对象,相对于range而言!

for循环打印range的值:

In [11]: for i in range(0,10,3):
    ...:     print i,
    ...:     
0 3 6 9

一步到位,打印出来range的值:

[[email protected] python]# cat 22.py 
#!/usr/bin/python

print [i for i in range(0,11)]

[[email protected] python]# python 22.py 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
//如下,把输出的值乘以2.
[[email protected] python]# python 22.py 
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

//打印偶数的数字
[[email protected] python]# !pyt
python 22.py 
[0, 2, 4, 6, 8, 10]

//打印所有的数字并乘方
python 22.py 
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

打印1-100的和:

#!/usr/bin/python2
# -*- coding: utf-8 -*-

sum = 0
for i in xrange(101):
    sum += i
print sum

遍历 – 字典

In [16]: dict1 = dict.fromkeys('abcde','100')

In [17]: dict1
Out[17]: {'a': '100', 'b': '100', 'c': '100', 'd': '100', 'e': '100'}

In [19]: for k in dict1:
    ...:     print k
    ...:     
    ...:     
a
c
b
e
d

//并获取各个k的值
In [22]: for k in dict1:
    ...:     print "%s --> %s" % (k, dict1[k])
    ...:     
a --> 100
c --> 100
b --> 100
e --> 100
d --> 100

再或者这样取值:

In [24]: for i in dict1.items():print i
('a', '100')
('c', '100')
('b', '100')
('e', '100')
('d', '100')

In [25]: for k,v in dict1.items():print k,v
a 100
c 100
b 100
e 100
d 100

//一步到位,直接取到值
In [26]: for k,v in dict1.iteritems():print k,v
a 100
c 100
b 100
e 100
d 100

循环退出

for循环如果正常结束,才会执行else语句。

例如:

for i in xrange(10):
    print i
else:
    print "main end"

打印结果:

0
1
2
3
4
5
6
7
8
9
main end

不难发现,当程序执行完毕后才会再次执行else下面的语句。

import time         #插入一个time对象(一切皆对象,)

for i in xrange(10):
    print i
    time.sleep(1)
else:
    print "main end"

如上我再次添加一个对象,然后再次手动停止任务,我们发现并没有打印“main end” 。也就是说,程序不正常结束是不会打印最后的main end的。


当我再次使用 break 的时候出现如下情况:

for i in xrange(10):
    print i
    if i == 5:
        break       # 当程序执行到i等于5 break就会跳出整个循环,就不会再次循环如下的6 7 8 9。
else:
    print "main end"

输出结果:

0
1
2
3
4
5   

使用 continue

for i in xrange(10):
    if i == 3:
        continue    ##当i==3的时候就会跳出此次循环,也就是下面的程序不会再次执行。
    if i == 5:  ##当i ==5的时候就直接跳出整个循环。
        break
    print i
else:
    print "main end"

输出的结果:

0
1
2
4

占位 pass:有时候写程序,可能当满足一个条件后,暂时哎没有想好需要输出什么值,这个时候就需要先用一个pass(什么也不会操作)去占取这个位置。

for i in xrange(10):
    if i == 3:
        continue
    elif i == 5:
        continue
    elif i == 6:
        pass
    print i
else:
    print "main end"

import time         #插入一个time对象(一切皆对象,)
import sys          #插入一个sys对象

for i in xrange(10):
    if i == 3:
        continue
    elif i == 5:
        continue
    elif i == 6:
        sys.exit()      ## 当i==6的时候主动退出整个脚本。
    print i
else:
    print "main end"

random 对象

import random       #插入一个random的对象

bb = random.randint(1,20)       ## 随机生成一个1-20的随机数
print bb

牛刀小试②:(猜数字)

import random
import sys

bb = random.randint(1,20)
print bb
for i in xrange(1,7):
    aa = int(raw_input("pls input a number: "))
    if aa == bb:
        print "you're so smart!!"
        sys.exit()
    elif aa > bb:
        print "pls input a small number."
    else:
        print "pls input a big number."
else:
    print "time is end!"

牛刀小试①:(打印9*9口诀)

#!/usr/bin/python2
# -*- coding: utf-8 -*-

for i in xrange(1,10):
    for j in xrange(1,i+1):
        print "%sx%s=%s" % (j, i, j*i),     ## ,的原因是不让程序自动换行
    print           ## 当j 循环结束后我们让其打印一个换行

结果:

1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81

练习题:

# -*- coding: utf-8 -*-
# @Time    : 2017/12/26 22:27
# @Author  : Zhdya
# @Email   : [email protected]
# @File    : test_1226.py
# @Software: PyCharm

# 习题
# 1. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
# 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
#
# 2. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
# 例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
# 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
#
# 3. 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。
# 已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

# 1----------------------------------------------

for i in '1234':
    for j in '1234':
        for m in '1234':
            if (i != j) and (j != m) and (i != m):
                print "%s %s %s" % (i, j, m)
print

# 2---------------------------------------------

for i in xrange(100,1000):
    unit = i % 10
    ten = i // 10 % 10
    hundred = i // 100
    if unit ** 3 + ten ** 3 + hundred ** 3 == i:
        print(i)

# 3---------------------------------------------

for a in 'xyz':
    for b in 'xyz':
        for c in 'xyz':
            if a != b and b != c and c != a:
                if a != 'x' and c != 'x' and c != 'z':
                    print "a vs %s b vs %s c vs %s" % (a, b, c)
                    
第二种方法:

list1 = ['x','y','z']
for a in list1:  # a 从 xyz中挑一个对手
    for b in list1:  # b 挑一个对手
        if a != b:  # a的对手和b的对手不相同
            for c in list1:  # c挑一个对手
                if a != c and b != c:  # a,b,c,对手互不相同
                    if a != 'x' and c != 'x' and c != 'z':  # a的对手不是x,c的对手不是x,c的对手不是z
                        print "a-{0} b-{1} c-{2}".format(a, b, c)  # 打印出结果

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏walterlv - 吕毅的博客

.NET/C# 判断某个类是否是泛型类型或泛型接口的子类型

2018-09-01 08:28

14320
来自专栏java学习

Java每日一练(2017/7/21)

聊天系统 ●我希望大家积极参与答题!有什么不懂可以加小编微信进行讨论 ★珍惜每一天,拼搏每一天,专心每一天,成功每一 如果你是初学者,或者是自学者!你可以加小编...

35440
来自专栏恰童鞋骚年

你必须知道的指针基础-3.指针的移动及指针的危险

  指针每次加一就是指针向前移动指针类型对应的字节数。下面通过一个int指针来指向一个int数组,看看指针的加法运算到底是个什么鬼?

10020
来自专栏分布式系统和大数据处理

四种简单的排序算法

我觉得如果想成为一名优秀的开发者,不仅要积极学习时下流行的新技术,比如WCF、Asp.Net MVC、AJAX等,熟练应用一些已经比较成熟的技术,比如Asp.N...

15720
来自专栏浪淘沙

java设计模式 (1) 工厂模式,抽象工厂模式,单子模式

工厂模式就是实例化对象,用工厂方法代替new操作的一种模式,会给你系统带来更大的可扩展性和尽量少的修改量。

15140
来自专栏闰土大叔

闰土说JS进阶之变量

前言 前端世界如此喧嚣,能进阶的何其稀少。大家好,你们的闰土哥在沉寂了数月之后又回来了!(此处应有掌声~~~) 前段时间在群里关于“闰土去哪儿了”的话题,让我既...

376100
来自专栏IT派

程序员必知的 Python 陷阱与缺陷列表

我个人对陷阱的定义是这样的:代码看起来可以工作,但不是以你“想当然”的方式。如果一段代码直接出错,抛出了异常,我不认为这是陷阱。比如,Python程序员应该都遇...

12840
来自专栏C/C++基础

C++特性使用建议

使用引用替代指针且所有不变的引用参数必须加上const。在C 语言中,如果函数需要修改变量的值,参数必须为指针,如int foo(int *pval),在 C+...

17730
来自专栏mathor

导入:什么是数据结构,为什么要学习数据结构,约瑟夫环的数组实现

22650
来自专栏Phoenix的Android之旅

说一个小bug

这个bug其实很简单,因为String是不可变内容的,想获得新值,必须重新赋值。正确应该是

10830

扫码关注云+社区

领取腾讯云代金券