python自动化运维学习第四天--循环

for循环

for循环用在序列里,循环遍历序列中的元素
语句格式:

for iterating_var in sequence:
    statement

for循环不仅可以遍历列表还能遍历字典

for k in dict1:print k   ##遍历字典中的key
for k in dict1:print k,dict1[k]  ##遍历字典中的key和value
for k in dict1.items():print k   ##遍历字典中key、value组成的元组
for k,v in dict1.items(): print k,v   ##遍历字典中的key和value,items方法返回的是列表
for k,v in dict1.iteritems(): print k,v  ##同上条,iteritems方法返回的是个对象

for else语句

for ...:
    if ...:
        ..../pass
        break/continue/sys.exit()
else:
...

只有for循环正常结束才会执行else语句
break退出循环
continue退出本次循环
pass什么也不执行,占位
sys.exit()退出程序

range()函数

range()函数可创建一个整数列表

range([start,] stop[, step])

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

xrange()函数

xrange() 函数用法与 range 完全相同,所不同的是生成的不是一个列表,而是一个生成器。
数字序列很大时,xrange()相对range()性能更好,不会占用很大内存空间,循环中使用xrange性能更好

while循环

for循环用在有次数的循环上
while循环用在有条件控制的循环上

while expression:
    statement

while循环直到表达式为假时才退出,表达式是个逻辑判断,必须返回一个True或False
while语句

while ...:
    if ...:
        ..../pass
        break/continue/sys.exit()
else:
...

跟for循环一样,else语句也要等while正常退出时才会执行

练习1

  1. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
    程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
#!/usr/bin/python
a = [1,2,3,4]
for i in a:
    b = i * 100
    for j in a:
        if j != i:
            s = j * 10
            for k in a:
                if k != i and k != j:
                    t = b + s + k
                    print t
  1. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
    程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
#!/usr/bin/python
for i in xrange(100,1000):
    bai,shi,ge = i/100,i%100/10,i%10
    if i == bai**3 + shi**3 + ge**3:
        print i
  1. 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
#!/usr/bin/python
# -*- coding:utf-8 -*-
l1 = ['x','y','z']
for a in l1:
    for b in l1:
        for c in l1:
            if a != b !=c != a and a != 'x' and c != 'x' and c != 'z':
                print "a --> %s, b --> %s, c --> %s" % (a, b, c)

练习2

  1. 将一个正整数分解质因数。例如:输入90,打印出90=2 * 3 * 3 * 5。
    程序分析:对n进行分解质因数,应先找到一个最小的质数i,然后按下述步骤完成:
    (1)如果分解后商为1,则说明分解质因数的过程已经结束,打印出即可。
    (2)如果商不为1,则应打印出i的值,并用n除以i的商,作为新的正整数进行分解,
     重复执行第一步。
    (3)如果n不能被i整除,则i的值加1,重复执行第一步。
#!/usr/bin/python
# -*- coding: utf-8 -*-
n = raw_input("please input a number:")
if n.isdigit():
    n = int(n)
    i = 2
    if n == i:
        print n
    else:
        while n >= i:
            k = n % i
            if k == 0:
                print i
                n = n / i
            else:
                i += 1
else:
    print "%s is not a number!" % n
  1. 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
    程序分析:采取逆向思维的方法,从后往前推断。
#!/usr/bin/python
# -*- coding:utf-8 -*-
n = 1
for i in range(9):
    n = ( n + 1 ) * 2
    print "第%s天的桃子数:%s" % ((9 - i), n)

猜你喜欢

转载自blog.csdn.net/wang035759984/article/details/84343976
今日推荐