第四讲:控制流:条件语句
控制流:条件语句
python条件语句是通过一条或多条语句的执行结果(True或False)来决定执行的代码块
一、if
if语句用于控制程序的执行,基本形式为:
if 判断条件:
执行语句……
elif 判断条件:
执行语句……
else:
执行语句……
注意:elif语句可以有多个或没有;else后面不能加条件判断语句,如果要加用elif。
练习1:输入学生的分数,当分数大于等于60时,打印及格,当小于60时,打印不及格,不在[0,100]区间,打印输入有误
# encoding=utf-8 score=int(raw_input(u'请输入您的分数:')) #raw_input的内容是字符串,如果需要做数字比较,需要强制转换int类型再做计算 if score not in range(0,101): #先排除不在[0,100]区间的数 print u'您输入的分数有误,请重新输入:' elif score>=60: print u'恭喜您,您的分数及格,分数是',score else: print u'您的分数不及格,分数是',score
练习2:输入三个数字,判断是否能构成三角形,如果能构成判断是否是等腰或等边三角形
try: A=input(u'输入数字A:') B=input(u'输入数字B:') C=input(u'输入数字C:') if A>0 and B>0 and C>0: if A+B>C or A+C>B or B+C>A: if A==B or A==C or B==C: print u'等腰三角形' elif A==B==C: print u'等边三角形' else: print u'普通三角形' else: print u'不能构成三角形' else: print u'输入有误,请重新输入正数' except Exception,e: print u'输入有误,请重新输入数字类型'
二、while:给定的判断条件为true时则执行循环体,否则退出循环体
while 判断条件:
执行语句
1、执行语句:可以是单个语句,或语句块
2、判断条件:可以是任意的表达式,任何非零或非空(null)的值均为true;当条件判断语句为false时,则循环结束。
3、while语句块中要想办法得到相反的结果,跳出循环,不然会有死循环
练习1:写一个永久循环的while 代码块,直到用户输入quit,退出
while 1: str=raw_input('enter something:') if str!='quit': print u'永久循环' else: print u'终止循环' break
练习2:实现数学中多项式求和公式的打印,比如:a6x^6 + a5x^5 + a4x^4 + a3x^3 + a2x^2 + a1x^1 + a0
def multion(n): strsum='' while n>=0: if n==0: strsum+='a'+'0' else: strsum+='a'+str(n)+'x'+'^'+str(n)+'+' n-=1 #每一次循环后n-1 return strsum #return最后的值 print multion(9)
三、for:可以遍历任意序列的项目,如列表或字符串或元组或字典
for iterating_var in sequence:
statements(s)
备注:数字不能迭代遍历
1、遍历列表:
例子:
lista=[1,2,3] for i in lista: str=raw_input('enter something:') if str!='quit': lista.append(str) #往列表中加字符串元素 print lista else: break 运行结果: [1, 2, 3, '111'] enter something:222 [1, 2, 3, '111', '222'] enter something:
2、遍历字符串:
例子:
str1='hello world' for i in str1: print i 运行结果: h e l l o w o r l d
3、遍历字典:
例子:统计名字列表中,各名字的首字母在名字列表中出现的次数,name=['foster','foe','lily','mickel','live','moon','ruby','cindy','miya']
name=['foster','foe','lily','mickel','live','moon','ruby','cindy','miya'] dictChar={} for i in name: if dictChar.has_key(i[0]): dictChar[i[0]]+=1 else: dictChar[i[0]]=1 print dictChar for k,v in dictChar.items(): print u'字母%s有%d个'%(k,v) 运行结果: {'c': 1, 'r': 1, 'm': 3, 'l': 2, 'f': 2} 字母c有1个 字母r有1个 字母m有3个 字母l有2个 字母f有2个
4、通过序列索引遍历迭代:
例子1:通过索引遍历列表的元素
strA=('A','B','C') for i in range(len(strA)): print i,strA[i] 运行结果: 0 A 1 B 2 C
例子2:判断是否为素数(素数是只能被1和本身整数的数)
num=int(raw_input('input a number:')) flag=True for i in range(2,num): #判断除了1和自己本身的数是否能整除 if num%i==0: flag=False if not flag: print num,u'不是素数' else: print num,u'是素数'
四、continue和break
1、有continue,结束当前循环(当前循环剩余的代码不会被执行),直接跳到下一个循环
2、有break,跳出循环马上中断,后面的语句不会被执行
五、嵌套循环
python允许一个循环体嵌套另一个循环体:
Python for 循环嵌套语法:
for iterating_var in sequence:
for iterating_var in sequence:
statements(s)
statements(s)
例子1:遍历列表中的元组和列表(嵌套循环)
listA=[1,2,3,(4,5,6),['a','b','c']] for i in listA: if isinstance(i,(list,tuple)): for j in i: print j, print else: print i, 运行结果: 1 2 3 4 5 6 a b c
例子2:嵌套循环输出10-50中个位带有1-5的所有数字
for i in range(10,51): for j in range(1,6): if i%10==j: print i