python分支和迴圈結構

来源:https://www.cnblogs.com/along21/archive/2019/11/11/11839084.html
-Advertisement-
Play Games

本文收錄在Python從入門到精通系列文章系列 1. 分支結構 1.1 應用場景 迄今為止,我們寫的Python代碼都是一條一條語句順序執行,這種代碼結構通常稱之為順序結構。然而僅有順序結構並不能解決所有的問題,比如我們設計一個游戲,游戲第一關的通關條件是玩家獲得1000分,那麼在完成本局游戲後,我 ...


 本文收錄在Python從入門到精通系列文章系列

1. 分支結構

1.1 應用場景

迄今為止,我們寫的Python代碼都是一條一條語句順序執行,這種代碼結構通常稱之為順序結構。然而僅有順序結構並不能解決所有的問題,比如我們設計一個游戲,游戲第一關的通關條件是玩家獲得1000分,那麼在完成本局游戲後,我們要根據玩家得到分數來決定究竟是進入第二關,還是告訴玩家“Game Over”,這裡就會產生兩個分支,而且這兩個分支只有一個會被執行。類似的場景還有很多,我們將這種結構稱之為分支結構選擇結構

 

1.2 if語句的使用

Python中,要構造分支結構可以使用ifelifelse關鍵字。所謂關鍵字就是有特殊含義的單詞,像ifelse就是專門用於構造分支結構的關鍵字,很顯然你不能夠使用它作為變數名(事實上,用作其他的標識符也是不可以)。

01-單分支

下麵的例子中演示瞭如何構造一個分支結構。

"""

用戶身份驗證

 

Version: 0.1

Author: along

"""

username = input('請輸入用戶名: ')

password = input('請輸入密碼: ')

 

if username == 'along' and password == '12345':

    print('驗證通過')

else:

    print('驗證失敗') 

唯一需要說明的是和C/C++Java等語言不同,Python中沒有用花括弧來構造代碼塊而是使用了縮進的方式來設置代碼的層次結構,如果if條件成立的情況下需要執行多條語句,只要保持多條語句具有相同的縮進就可以了,換句話說連續的代碼如果又保持了相同的縮進那麼它們屬於同一個代碼塊,相當於是一個執行的整體。

 

02-多分支

當然如果要構造出更多的分支,可以使用if…elif…else…結構,例如下麵的分段函數求值。

"""

分段函數求值

 

        3x - 5  (x > 1)

f(x) =  x + 2   (-1 <= x <= 1)

        5x + 3  (x < -1)

 

Version: 0.1

Author: along

"""

x = float(input('請輸入一個數: '))

if x > 1 :

    y = 3 * x - 5

elif x >= -1 and x <= 1 :

    y = x + 2

else:

    y = 5 * x + 3

print('f(%.2f) = %.2f' % (x , y))

 

03-嵌套分支

當然根據實際開發的需要,分支結構是可以嵌套的,例如判斷是否通關以後還要根據你獲得的寶物或者道具的數量對你的表現給出等級(比如點亮兩顆或三顆星星),那麼我們就需要在if的內部構造出一個新的分支結構,同理elifelse中也可以再構造新的分支,我們稱之為嵌套的分支結構,也就是說上面的代碼也可以寫成下麵的樣子。

"""

分段函數求值

        3x - 5  (x > 1)

f(x) =  x + 2   (-1 <= x <= 1)

        5x + 3  (x < -1)

 

Version: 0.1

Author: along

"""

x = float(input('x = '))

if x > 1:

    y = 3 * x - 5

else:

    if x >= -1:

        y = x + 2

    else:

        y = 5 * x + 3

print('f(%.2f) = %.2f' % (x, y))

說明: 大家可以自己感受一下這兩種寫法到底是哪一種更好。在之前我們提到的Python之禪中有這麼一句話“Flat is better than nested.”,之所以提倡代碼扁平化是因為嵌套結構的嵌套層次多了之後會嚴重的影響代碼的可讀性,所以能使用扁平化的結構時就不要使用嵌套。

 

1.3 練習

練習1:英制單位英寸與公制單位釐米互換。

參考答案:

"""

英制單位英寸和公制單位釐米互換

 

Version: 0.1

Author: along

"""

value = float(input('請輸入長度: '))

unit = input('請輸入單位: ')

if unit == 'in' or unit == '英寸':

    print('%f英寸 = %f釐米' % (value, value * 2.54))

elif unit == 'cm' or unit == '釐米':

    print('%f釐米 = %f英寸' % (value, value / 2.54))

else:

    print('請輸入有效的單位')

 

練習2:百分製成績轉換為等級製成績。

要求:如果輸入的成績在90分以上(含90分)輸出A80-90分(不含90分)輸出B70-80分(不含80分)輸出C60-70分(不含70分)輸出D60分以下輸出E

參考答案:

"""

百分製成績轉換為等級製成績

 

Version: 0.1

Author: along

"""

score = float(input('請輸入成績: '))

if score >= 90:

    grade = 'A'

elif score >= 80:

    grade = 'B'

elif score >= 70:

    grade = 'C'

elif score >= 60:

    grade = 'D'

else:

    grade = 'E'

print('對應的等級是:', grade)

 

練習3:輸入三條邊長,如果能構成三角形就計算周長和麵積。

參考答案:

"""

判斷輸入的邊長能否構成三角形,如果能則計算出三角形的周長和麵積

 

Version: 0.1

Author: along

"""

a = float(input('a = '))

b = float(input('b = '))

c = float(input('c = '))

if a + b > c and a + c > b and b + c > a:

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 場景 Nginx配置實例-負載均衡實例:平均訪問多台伺服器: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103019576 在上面實現了負載均衡的簡單實例,平均訪問兩個伺服器。 但是如果不想使其平均訪問,有哪些常用的分配伺服器 ...
  • 場景 Nginx配置實例-反向代理實例:根據訪問的路徑跳轉到不同埠的服務中: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102963715 在上個實例中,搭建好兩台tomcat伺服器。 負載均衡實現效果 瀏覽器輸入訪問地址, ...
  • Map介面概述: 現實生活中,我們常會看到這樣的一種集合:IP地址與主機名,身份證號與個人,系統用戶名與系統用戶對象等, 這種一一對應的關係,就叫做映射。Java提供了專門的集合類用來存放這種對象關係的對象,即 java.util.Map 介面 Map介面與Collection介面的區別: Coll ...
  • 一、貪婪和非貪婪 1.貪婪:儘可能多的匹配,(*)表示貪婪匹配 2.非貪婪:找到符合條件的最小內容即可,(?)表示非貪婪 3.正則預設使用貪婪匹配 import re title = u"<div>name</div><div>age</div>" p1 = re.compile(r"<div>.* ...
  • 很多伙伴對 Python 的迭代器、可迭代對象、生成器這幾個概念有點搞不清楚,我來說說我的理解,希望對需要的朋友有所幫助。 1 迭代器協議 迭代器協議是核心,搞懂了這個,上面的幾個概念也就很好理解了。 所謂迭代器協議,就是要求一個迭代器必須要實現如下兩個方法 Return the iterator ...
  • 分頁查詢在網頁中隨處可見,那原理是什麼呢?下麵簡單介紹一下基於MySql資料庫的limit實現方法。 首先明確為什麼要使用分頁查詢,因為數據龐大,查詢不可能全部顯示在頁面上,如果全部顯示在頁面上,也會造成查詢速度慢的情況,所以分頁查詢解決了①數據查詢;②性能優化,等(其他問題歡迎補充)的問題。 分頁 ...
  • 一次線上頻繁FullGC問題的排查和解決記錄,整理了一下通用的排查解決過程,同時介紹了一些可能會用到的工具。 ...
  • 場景 JavaSE基礎 面向對象特征以及理解 訪問許可權修飾符區別 理解clone對象 JavaSE語法 java有沒有goto語句 &和&&的區別 如何跳出當前的多重嵌套迴圈? 是否可以繼承String? 重載與重寫的區別? char型變數中能不能存儲一個中文漢字? 抽象類與介面的異同 抽象方法是否 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...