關(guān)于 Python 的條件控制技巧
在編程中,條件控制是實(shí)現(xiàn)邏輯判斷的基礎(chǔ)。Python 提供了多種方式來(lái)實(shí)現(xiàn)條件控制,包括 if 語(yǔ)句、elif 語(yǔ)句和 else 語(yǔ)句等。掌握這些基礎(chǔ)可以幫助你寫(xiě)出更加靈活和智能的程序。
基本的條件控制語(yǔ)句
1. if 語(yǔ)句
用途:用于基于某個(gè)條件執(zhí)行一段代碼塊。
語(yǔ)法:
if condition:
# 條件為真時(shí)執(zhí)行的代碼
示例:編寫(xiě)一個(gè)程序,判斷一個(gè)數(shù)字是否大于 10。
number = 15
if number > 10:
print("這個(gè)數(shù)字大于 10")
輸出:
這個(gè)數(shù)字大于 10
解釋:這里 number > 10 是一個(gè)條件表達(dá)式。如果這個(gè)表達(dá)式的值為 True,那么打印語(yǔ)句就會(huì)被執(zhí)行。
技巧:在判斷之前可以先檢查變量是否已經(jīng)定義,避免運(yùn)行時(shí)錯(cuò)誤。
number = input("請(qǐng)輸入一個(gè)數(shù)字:")
if number.isdigit(): # 檢查輸入是否為數(shù)字
number = int(number)
if number > 10:
print("這個(gè)數(shù)字大于 10")
else:
print("請(qǐng)輸入有效的數(shù)字")
注意事項(xiàng):確保在使用條件語(yǔ)句時(shí)考慮所有可能的情況,避免遺漏。
2. if-else 語(yǔ)句
用途:用于在條件為真或假時(shí)分別執(zhí)行不同的代碼塊。
語(yǔ)法:
if condition:
# 條件為真時(shí)執(zhí)行的代碼
else:
# 條件為假時(shí)執(zhí)行的代碼
示例:判斷一個(gè)年份是否為閏年。
year = 2024
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
print(year, "是閏年")
else:
print(year, "不是閏年")
輸出:
2024 是閏年
解釋:閏年的規(guī)則是能被 4 整除但不能被 100 整除,或者能被 400 整除。
技巧:可以將復(fù)雜的條件拆分成多個(gè)簡(jiǎn)單的條件組合。
is_divisible_by_4 = year % 4 == 0
is_not_divisible_by_100 = year % 100 != 0
is_divisible_by_400 = year % 400 == 0
if is_divisible_by_4 and is_not_divisible_by_100 or is_divisible_by_400:
print(year, "是閏年")
else:
print(year, "不是閏年")
注意事項(xiàng):在處理多個(gè)條件時(shí),注意運(yùn)算符的優(yōu)先級(jí)。
3. if-elif-else 語(yǔ)句
用途:用于根據(jù)多個(gè)條件選擇執(zhí)行不同的代碼塊。
語(yǔ)法:
if condition1:
# 條件 1 為真時(shí)執(zhí)行的代碼
elif condition2:
# 條件 2 為真時(shí)執(zhí)行的代碼
else:
# 其他情況執(zhí)行的代碼
示例:根據(jù)成績(jī)等級(jí)輸出評(píng)語(yǔ)。
score = 85
if score >= 90:
print("優(yōu)秀")
elif score >= 70:
print("良好")
else:
print("加油")
輸出:
良好
解釋:首先檢查 score >= 90,如果為真,則打印“優(yōu)秀”。否則,再檢查 score >= 70,如果為真,則打印“良好”。否則,打印“加油”。
技巧:可以根據(jù)實(shí)際情況添加更多的 elif 分支。
if score >= 90:
print("優(yōu)秀")
elif score >= 80:
print("良好")
elif score >= 70:
print("合格")
elif score >= 60:
print("及格")
else:
print("不及格")
注意事項(xiàng):在編寫(xiě)多個(gè)條件分支時(shí),注意順序的重要性,確保每個(gè)條件都能正確地被評(píng)估。
進(jìn)階的條件控制技術(shù)
1. 嵌套 if 語(yǔ)句
用途:在一個(gè) if 語(yǔ)句內(nèi)部再包含另一個(gè) if 語(yǔ)句,實(shí)現(xiàn)更復(fù)雜的邏輯判斷。
語(yǔ)法:
if outer_condition:
if inner_condition:
# 條件為真時(shí)執(zhí)行的代碼
else:
# 內(nèi)部條件為假時(shí)執(zhí)行的代碼
else:
# 外部條件為假時(shí)執(zhí)行的代碼
示例:判斷一個(gè)用戶是否成年以及是否有駕駛資格。
age = 20
has_driving_license = True
if age >= 18:
if has_driving_license:
print("你可以開(kāi)車(chē)")
else:
print("你需要考取駕照")
else:
print("你還未成年")
輸出:
你可以開(kāi)車(chē)
解釋:首先檢查年齡是否大于等于 18 歲,如果為真,則進(jìn)一步檢查是否有駕駛執(zhí)照。否則,打印“你還未成年”。
技巧:嵌套 if 語(yǔ)句可以用來(lái)處理多個(gè)層次的邏輯關(guān)系。
if age >= 18:
if has_driving_license:
print("你可以開(kāi)車(chē)")
elif age >= 16:
print("你可以申請(qǐng)駕照")
else:
print("你需要等到 16 歲才能申請(qǐng)駕照")
else:
print("你還未成年")
注意事項(xiàng):嵌套層數(shù)過(guò)多可能會(huì)導(dǎo)致代碼難以閱讀和維護(hù),盡量保持簡(jiǎn)潔。
2. 使用邏輯運(yùn)算符
用途:通過(guò)邏輯運(yùn)算符(如 and、or 和 not)來(lái)組合多個(gè)條件,實(shí)現(xiàn)更復(fù)雜的邏輯判斷。
示例:判斷用戶是否滿足特定條件。
age = 25
is_student = False
if age >= 18 and not is_student:
print("你可以申請(qǐng)信用卡")
else:
print("你不滿足條件")
輸出:
你可以申請(qǐng)信用卡
解釋:這里使用了 and 運(yùn)算符和 not 運(yùn)算符。只有當(dāng)年齡大于等于 18 歲并且不是學(xué)生時(shí),才會(huì)打印“你可以申請(qǐng)信用卡”。
技巧:合理使用邏輯運(yùn)算符可以使條件判斷更加簡(jiǎn)潔明了。
if age >= 18 and (not is_student or income >= 20000):
print("你可以申請(qǐng)信用卡")
else:
print("你不滿足條件")
注意事項(xiàng):在使用邏輯運(yùn)算符時(shí),要注意運(yùn)算符的優(yōu)先級(jí),必要時(shí)使用括號(hào)來(lái)明確優(yōu)先級(jí)。
3. 使用條件表達(dá)式
用途:條件表達(dá)式是一種簡(jiǎn)化形式的 if-else 語(yǔ)句,可以在一行內(nèi)實(shí)現(xiàn)條件判斷。
語(yǔ)法:
value = some_value if condition else another_value
示例:根據(jù)年齡返回相應(yīng)的評(píng)價(jià)。
age = 25
result = "成年人" if age >= 18 else "未成年人"
print(result)
輸出:
成年人
解釋:這里使用了條件表達(dá)式 age >= 18,如果條件為真,則 result 被賦值為 "成年人",否則賦值為 "未成年人"。
技巧:條件表達(dá)式適用于簡(jiǎn)單的條件判斷,可以使代碼更加簡(jiǎn)潔。
score = 85
grade = "優(yōu)秀" if score >= 90 else ("良好" if score >= 70 else "加油")
print(grade)
注意事項(xiàng):條件表達(dá)式雖然簡(jiǎn)潔,但嵌套過(guò)多會(huì)降低代碼的可讀性,要適度使用。
4. 使用列表推導(dǎo)式和條件表達(dá)式
用途:通過(guò)列表推導(dǎo)式結(jié)合條件表達(dá)式來(lái)簡(jiǎn)化循環(huán)和條件判斷。
語(yǔ)法:
result = [expression for item in iterable if condition]
示例:找出一個(gè)列表中所有偶數(shù)的平方。
numbers = [1, 2, 3, 4, 5, 6]
squares = [num ** 2 for num in numbers if num % 2 == 0]
print(squares)
輸出:
[4, 16, 36]
解釋:這里使用了列表推導(dǎo)式 [num ** 2 for num in numbers if num % 2 == 0],只有當(dāng) num 是偶數(shù)時(shí),才會(huì)計(jì)算其平方并加入到結(jié)果列表中。
技巧:列表推導(dǎo)式結(jié)合條件表達(dá)式可以使代碼更加簡(jiǎn)潔。
even_squares = [num ** 2 if num % 2 == 0 else num for num in numbers]
print(even_squares)
注意事項(xiàng):列表推導(dǎo)式雖然簡(jiǎn)潔,但嵌套過(guò)多會(huì)降低代碼的可讀性,要適度使用。
5.實(shí)戰(zhàn)案例:成績(jī)管理系統(tǒng)
假設(shè)我們已經(jīng)實(shí)現(xiàn)了基本的成績(jī)管理系統(tǒng),現(xiàn)在將進(jìn)一步完善系統(tǒng)功能,使其能夠處理更多的場(chǎng)景。
需求: 1. 輸入學(xué)生的姓名、年齡和分?jǐn)?shù)。 2. 根據(jù)分?jǐn)?shù)輸出相應(yīng)的評(píng)價(jià)(優(yōu)秀、良好、合格、及格、不及格)。 3. 記錄學(xué)生的基本信息,并保存到文件中。 4. 提供查詢功能,允許用戶查詢學(xué)生的成績(jī)和評(píng)價(jià)。
步驟:
(1) 輸入學(xué)生信息:
獲取學(xué)生的姓名、年齡和分?jǐn)?shù)。
檢查輸入的有效性。
import json
def get_student_info():
name = input("請(qǐng)輸入學(xué)生姓名:")
age = input("請(qǐng)輸入學(xué)生年齡:")
score = input("請(qǐng)輸入學(xué)生成績(jī):")
if not name.strip() or not age.isdigit() or not score.isdigit():
print("輸入有誤,請(qǐng)重新輸入!")
return None
age = int(age)
score = int(score)
return {"name": name, "age": age, "score": score}
(2) 根據(jù)分?jǐn)?shù)輸出評(píng)價(jià):
判斷分?jǐn)?shù)范圍并輸出相應(yīng)的評(píng)價(jià)。
def evaluate_score(score):
if score >= 90:
return "優(yōu)秀"
elif score >= 80:
return "良好"
elif score >= 70:
return "合格"
elif score >= 60:
return "及格"
else:
(3) 記錄學(xué)生信息:
將學(xué)生信息保存到 JSON 文件中。
def save_student_info(student_info):
with open("students.json", "a") as file:
json.dump(student_info, file)
file.write("\n")
(4) 查詢學(xué)生信息:
讀取文件中的學(xué)生信息,并根據(jù)姓名查詢成績(jī)和評(píng)價(jià)。
def query_student_info(name):
with open("students.json", "r") as file:
students = [json.loads(line) for line in file]
for student in students:
if student["name"] == name:
evaluation = evaluate_score(student["score"])
print(f"{name} 的成績(jī)?yōu)?{evaluation}")
return
print(f"沒(méi)有找到 {name} 的信息")
(5) 主程序:
- 輸入學(xué)生信息。
- 輸出評(píng)價(jià)。
- 保存學(xué)生信息。
- 查詢學(xué)生信息。
def main():
while True:
print("請(qǐng)選擇操作:")
print("1. 添加學(xué)生信息")
print("2. 查詢學(xué)生信息")
print("3. 退出")
choice = input("請(qǐng)輸入選項(xiàng):")
if choice == "1":
student_info = get_student_info()
if student_info:
evaluation = evaluate_score(student_info["score"])
print(f"{student_info['name']} 的成績(jī)?yōu)?{evaluation}")
save_student_info(student_info)
elif choice == "2":
name = input("請(qǐng)輸入學(xué)生姓名:")
query_student_info(name)
elif choice == "3":
break
else:
print("無(wú)效的選項(xiàng),請(qǐng)重新輸入!")
if __name__ == "__main__":
main()
運(yùn)行結(jié)果:
請(qǐng)選擇操作:
**1.** 添加學(xué)生信息
**2.** 查詢學(xué)生信息
**3.** 退出
請(qǐng)輸入選項(xiàng):1
請(qǐng)輸入學(xué)生姓名:張三
請(qǐng)輸入學(xué)生年齡:20
請(qǐng)輸入學(xué)生成績(jī):85
張三 的成績(jī)?yōu)?良好
請(qǐng)選擇操作:
**1.** 添加學(xué)生信息
**2.** 查詢學(xué)生信息
**3.** 退出
請(qǐng)輸入選項(xiàng):2
請(qǐng)輸入學(xué)生姓名:張三
張三 的成績(jī)?yōu)?良好
請(qǐng)選擇操作:
**1.** 添加學(xué)生信息
**2.** 查詢學(xué)生信息
**3.** 退出
請(qǐng)輸入選項(xiàng):3
分析:
- 輸入檢查:在獲取學(xué)生信息時(shí),檢查了姓名、年齡和分?jǐn)?shù)的有效性,避免了無(wú)效輸入。
- 條件判斷:使用了嵌套的 if-elif-else 語(yǔ)句來(lái)判斷分?jǐn)?shù)范圍,并輸出相應(yīng)的評(píng)價(jià)。
- 數(shù)據(jù)保存:將學(xué)生信息以 JSON 格式保存到文件中,方便后續(xù)查看和管理。
- 查詢功能:通過(guò)讀取文件中的數(shù)據(jù),并根據(jù)姓名查詢學(xué)生的成績(jī)和評(píng)價(jià)。
技巧和注意事項(xiàng):
- 在輸入檢查時(shí),使用了字符串和整數(shù)類型的轉(zhuǎn)換函數(shù),確保數(shù)據(jù)類型的一致性。
- 條件判斷時(shí),合理安排了條件的順序,使得邏輯更加清晰。
- 數(shù)據(jù)保存時(shí),使用了文件操作函數(shù),確保數(shù)據(jù)的安全性和持久性。
- 查詢功能時(shí),使用了列表推導(dǎo)式來(lái)讀取文件中的數(shù)據(jù),并通過(guò)循環(huán)查找指定的學(xué)生信息。