轉載http://blog.csdn.net/lynn_yan/article/details/5464911
條件語句
1) if 語句
例子:
# 執行if語句內的程序
a = input("a:")
b = input("b:")
if(a > b):
print a, " > ", b
Note:如果是在pydev+eclipse下,運行然後輸入數字,打個回車就會出現“SyntaxError:unexpected EOF while parsing”,所以只能用raw_input來代替。原因是回車,編譯器都多讀一個/r,一般按回車後,shells 會輸入“/n”,但因爲Eclipse控制檯輸入的是“/r/n”,python就不能很好的識別,可以說這是Python的一個bug。
# 跳過if語句
a = input("a:")
b = input("b:")
if(a > b):
print a, " > ", b
print a, " < ", b
# if else語句
a = input("a:")
b = input("b:")
if(a > b):
print a, " > ", b
else:
print a, " < ", b
Note:input()he raw_input. Raw_input( )捕獲用戶的原始輸入,raw_input()函數的聲明如下所示:
Raw_input([prompt])->string,參數prompt是控制檯輸出的提示文字,提示用戶輸入。返回值爲字符串。如果輸入的是數字,返回的還是字符串。
Input( )支持用戶輸入數字或表達式,不支持輸入字符串。Input( )函數的聲明如下所示:
Input([prompt])->value。
2) if…elif…else語句
例子:
# if elif else語句
score = raw_input("score:")
score=int(score)
if(score >= 90) and (score <= 100):
print "A"
elif(score >= 80) and (score < 90):
print "B"
elif(score >= 60) and (score < 80):
print "C"
else:
print "D"
3) if語句的嵌套
編寫條件語句時,應該儘量避免使用嵌套語句。嵌套語句不便於閱讀,而且可能會忽略一些可能性。
例子:
x = -1
y = 99
if(x >= 0):
if(x > 0): #嵌套的if語句
y = 1
else:
y = 0
else:
y = -1
print "y =", y
輸出爲y=-1
4) 實現switch語句的功能
Python並沒有提供switch語句,Python可以通過字典實現switch語句的功能。
實現方法分兩步。首先,定義一個字典。字典是由鍵值對組成的集合。其次,調用字典的get()獲取相應的表達式。
例子:
from __future__ import division
x = 1
y = 2
operator = "/"
result = {
"+" : x + y,
"-" : x - y,
"*" : x * y,
"/" : x / y
}
print result.get(operator)
輸出爲0.5
另一種使用switch分支語句的方案是創建一個switch類,處理程序的流程。
a) 創建一個switch類,該類繼承自Python的祖先類object。調用構造函數init( )初始化需要匹配的字符串,並需要定義兩個成員變量value和fall。Value用於存放需要匹配的字符串,fall用於記錄是否匹配成功,初始值爲false,標識匹配不成功。如果匹配成功,程序往後執行。
b) 定義一個match( )方法,該方法用於用於匹配case子句。這裏需要考慮三種情況:首先是匹配成功的情況,其次是匹配失敗的默認case子句,最後是case子句中沒有使用break中斷的情況。
c) 重寫__iter__( )方法,定義該方法後才能使switch類用於循環語句中。__iter__( )調用match( )方法進行匹配。通過yield保留字,使函數可以在循環中迭代。此外,調用StopIteration異常中斷循環。
d) 編寫調用代碼,在for…in…循環中使用switch類。
例子:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class switch(object):
def __init__(self, value): # 初始化需要匹配的值value
self.value = value
self.fall = False # 如果匹配到的case語句中沒有break,則fall爲true。
def __iter__(self):
yield self.match # 調用match方法 返回一個生成器
raise StopIteration # StopIteration 異常來判斷for循環是否結束
def match(self, *args): # 模擬case子句的方法
if self.fall or not args: # 如果fall爲true,則繼續執行下面的case子句
# 或case子句沒有匹配項,則流轉到默認分支。
return True
elif self.value in args: # 匹配成功
self.fall = True
return True
else: # 匹配失敗
return False
operator = "+"
x = 1
y = 2
for case in switch(operator): # switch只能用於for in循環中
if case('+'):
print x + y
break
if case('-'):
print x - y
break
if case('*'):
print x * y
break
if case('/'):
print x / y
break
if case(): # 默認分支
print ""
輸出爲3