for
for 序列
1 | list1 = [1,2,3,4] |
print默认输出每行都带换行符,加逗号可以抑制换行符。
tange()函数,返回列表
1
2
3for i in range(1,11):
if i % 2 == 0:
print i列表重写(列表表达式)
1
2
3print [i for i in range(1,11)]
print [i**2 for i in range(1,11) if i % 2 == 0]实例
计算1+2+….+1001
2
3
4sum = 0
for i in range(1,101):
sum = sum + i
print sum
xrange()
函数返回对象,不占用内存资源,比range()
更快更高效。
for 字典
1 | In [7]: dic1 = dict.fromkeys('abcde',100) |
- 乘法口诀实现
1
2
3
4for i in xrange(1,10):
for j in xrange(1,i+1)
print “%sx%s” %(j, i, j*i),
print
循环的退出
- for
循环正常结束才会执行else。 - if
出现多个时,每个都会判断。 - elif
当前面有if满足条件时,该条件不再判断。 - break
直接退出循环,不再执行。 - continue
退出该次循环,执行下一次循环。 - pass
占位符,无意义 - sys.exit()
退出整个脚本示例1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# cat 2_1_5.py
#!/usr/bin/python
import sys
import time
for i in xrange(10):
if i == 3:
continue
elif i == 6:
pass
elif i == 7:
sys.exit()
print i
else:
print "main end"
print "hahaha"
输出结果1
2
3
4
5
6
7# python 2_1_5.py
0
1
2
4
5
6
示例2
- 系统生成一个20以内的随机整数
玩家有6次机会进行猜猜看,每次猜测都有反馈(猜大了,猜小了,猜对了,结束)
6次中,猜对了,玩家赢了
否则系统赢1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# cat 2_1_6.py
#!/usr/bin/python
import random
flag = 0
digt = random.randint(1,20)
print digt
for i in xrange(1,7):
in_num = int(raw_input("Please input a number:"))
if in_num > digt:
print "too big;"
elif in_num < digt:
print "too small;"
elif in_num == digt:
print "you are right."
flag = 1
break
if flag == 0:
print "have no change,system win!"
elif flag == 1:
print "congratulation!You win!"
while循环
说明
for循环用在有次数的循环上。
while循环用在有条件的控制上。
while循环,直到表达式为假才退出;表达式是一个逻辑表达式,必须返回一个True或False。
while循环后的else用法同for循环,当while条件正常结束时执行,否则不执行。
示例
1 | cat 2_2_2.py |
输出结果1
2
3
4
5
6
7
8
9
10
11
12# python 2_2_2.py
hello
Please input something,q for quit:a
continue
hello
Please input something,q for quit:quit
hello
Please input something,q for quit:quit
hello
Please input something,q for quit:q
continue
world
实例1
- 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。1
2
3
4
5
6
7
8
9
10
11i = 0
list1 = []
for a in range(1, 5):
for b in range(1, 5):
for c in range(1, 5):
if((a != b) and (a != c) and (b != c)):
i += 1
d = a + b*10 + c*100
list1.append(d)
print("满足条件的三位数共有{}个,如下列表所示".format(i))
print(list1)
输出结果1
2满足条件的三位数共有24个,如下列表所示
[321, 421, 231, 431, 241, 341, 312, 412, 132, 432, 142, 342, 213, 413, 123, 423, 143, 243, 214, 314, 124, 324, 134, 234]
- 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
1 | list2 = [] |
输出结果1
[153, 370, 371, 407]
- 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
1
2
3
4
5import itertools
list1 = ['x', 'y', 'z']
for i in itertools.permutations(list1):
if(i[0] != 'x' and i[2] != 'x' and i[2] != 'z'):
print('a vs {0}, b vs {1}, c vs {2}'.format(i[0], i[1], i[2]))
输出结果1
a vs z, b vs x, c vs y
实例2
- 将一个正整数分解质因数。例如:输入90,打印出90=233*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数i,然后按下述步骤完成:
(1)如果分解后商为1,则说明分解质因数的过程已经结束,打印出即可。
(2)如果商不为1,则应打印出i的值,并用n除以i的商,作为新的正整数进行分解,重复执行第一步。
(3)如果n不能被i整除,则i的值加1,重复执行第一步。1
2
3
4
5
6
7
8
9
10
11
12
13num = int(input("input a integer:"))
list1 = [num]
str1 = ''
while num != 1:
for i in range(2, int(num+1)):
if num % i == 0:
list1.append(i)
num = num / i
break
for j in range(1, len(list1)):
str1 += str(list1[j])
print("{0}=".format(list1[0]), end='')
print('*'.join(str1))
输出结果1
2input a integer:175
175=5*5*7
- 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
程序分析:采取逆向思维的方法,从后往前推断。1
2
3
4p = 1
for i in range(9, 0, -1):
p = (p+1)*2
print(p)
输出结果1
1534