Python:流程式控制制

来源:https://www.cnblogs.com/Rohn/archive/2020/06/20/13170524.html
-Advertisement-
Play Games

Python使用`if`語句提供分支支持,提供了`while`、`for-in`迴圈,也提供了`break`和`continue`控製程序的迴圈結構。 ...


blog:https://www.cnblogs.com/Rohn

Tips:本文中代碼均使用3.8.x版本的Python。

部分文字和圖片源自網路,侵刪。

目錄

關於流程式控制制

Python 同樣提供了現代編程語言都支持的兩種基本流程式控制制結構,分支結構和迴圈結構:

  • 分支結構用於實現根據條件來選擇性地執行某段代碼;
  • 迴圈結構用於實現根據迴圈條件重覆執行某段代碼;

Python使用if語句提供分支支持,提供了whilefor-in迴圈,也提供了breakcontinue控製程序的迴圈結構。

在學習流程式控制制前,需要瞭解布爾、比較操作符等知識。

布爾值

雖然整型、浮點型和字元串數據類型有無數種可能的值,但“布爾”數據類型只有兩種值:TrueFalse。Boolean(布爾)的首字母大寫, 因為這個數據類型是根據數學家George Boole命名的。在作為Python代碼輸入時,布爾值TrueFalse不像字元串,兩邊沒有引號,它們總是以大寫字母TF開頭, 後面的字母小寫。

例如:

>>> 2==2
True
>>> a=true
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'true' is not defined
>>> a=True
>>> a
True

比較操作符

比較操作符比較兩個值,求值為一個布爾值。

以下是操作符及其含義,這些操作符根據給它們提供的值,求值為TrueFalse

操作符 含義
== 等於
!= 不等於
< 小於
> 大於
<= 小於等於
>= 大於等於

Tips:整型或浮點型的值永遠不會與字元串相等。<><=>=操作符僅用於整型和浮點型值。

例如:

>>> 33 == 33
True
>>> 33 != 33
False
>>> 33 != 34
True
>>> 33 < 34
True
>>> 33 > 34
False
>>> 33 > 32
True

布爾操作符

3 個布爾操作符(andornot)用於比較布爾值。

二元布爾操作符

andor操作符總是接受兩個布爾值(或表達式),所以它們被認為是元操作符。如果兩個布爾值都為Trueand操作符就將表達式求值為True,否則求值
False

操作符and的真值表

表達式 求值為
True and True True
True and False False
False and True False
False and False False

or操作符的真值表

表達式 求值為
True or True True
True or False True
False or True True
False or False False

not操作符

not操作符只作用於一個布爾值(或表達式)。not操作符求值為相反的布爾值。

not操作符的真值表

表達式 求值為
not True False
not False True

混合布爾和比較操作符

既然比較操作符求值為布爾值,就可以和布爾操作符一起,在表達式中使用。

例如:

>>> (2 < 3) and (22 > 1)
True
>>> (2 > 3) and (22 > 1)
False
>>> (1 == 2) or (3 == 3)
True

Tips:和算術操作符一樣,布爾操作符也有操作順序。在所有算術和比較操作符求值後,Python先求值not操作符,然後是and操作符,然後是or操作符。

控制流的元素

控制流語句的開始部分通常是條件,接下來是一個代碼塊,稱為子句

條件

你前面看到的布爾表達式可以看成是條件,它和表達式是一回事。條件只是在控制流語句的上下文中更具體的名稱。條件總是求值為一個布爾值,TrueFalse。控制流語句根據條件是 True 還是 False,來決定做什麼。 幾乎所有的控制流語句都使用條件。

代碼塊

一些代碼行可以作為一組, 放在代碼塊 中。 可以根據代碼行的縮進,知道代碼塊的開始和結束。代碼塊有 3 條規則:

  • 縮進增加時, 代碼塊開始;
  • 代碼塊可以包含其他代碼塊;
  • 縮進減少為零,或減少為外麵包圍代碼塊的縮進,代碼塊就結束了;

if語句

選擇(條件)語句可細分為3種形式,分別是if語句、if-else語句和if-elif-else語句。

if語句

if 條件表達式:
    代碼塊

image

if-else語句

if 表達式:
    代碼塊 1
else:
    代碼塊 2

image

if-elif-else語句

if 表達式 1:
    代碼塊 1
elif 表達式 2:
    代碼塊 2
elif 表達式 3:
    代碼塊 3
...
else:
    代碼塊 n

image

練習

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

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('請輸入有效的單位')

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

要求:如果輸入的成績在90分以上(含90分)輸出A;80分-90分(不含90分)輸出B;70分-80分(不含80分)輸出C;60分-70分(不含70分)輸出D;60分以下輸出E。

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)

while語句

利用while語句,可以讓一個代碼塊一遍又一遍的執行。只要while語句的條件為Truewhile子句中的代碼就會執行。在代碼中,while語句總是包含下麵幾部分:

  • 關鍵字;
  • 條件(求值為TrueFalse的表達式);
  • 冒號;
  • 從新行開始,縮進的代碼塊(稱為while子句)。

語法格式

語法格式如下:

while 條件表達式:
    代碼塊

image

while迴圈中,條件總是在每次迭代開始時檢查(也就是每次迴圈執行時)。如果條件為True, 子句就會執行,然後,再次檢查條件。當條件第一次為False時,while子句就跳過。

例如:

spam = 0
while spam < 5:
    print('hello world')
    spam += 1

練習

猜數字游戲

import random

answer = random.randint(1, 100)
counter = 0
while True:
    counter += 1
    number = int(input('請輸入: '))
    if number < answer:
        print('大一點')
    elif number > answer:
        print('小一點')
    else:
        print('恭喜你猜對了!')
        break
print('你總共猜了%d次' % counter)
if counter > 7:
    print('你的智商餘額明顯不足')

for語句

在條件為True時,while迴圈就會繼續迴圈(這是它的名稱的由來)。但如果你想讓一個代碼塊執行固定次數,該怎麼辦?可以通過for迴圈語句和range()函數來實現。

常用於遍歷字元串、列表、元組、字典、集合等序列類型,逐個獲取序列中的各個元素。

語法格式

語法格式如下:

for 迭代變數 in 字元串|列表|元組|字典|集合:
    代碼塊

在使用for迴圈時,最基本的應用就是進行數值迴圈。比如說,想要實現從1到100的累加,可以執行如下代碼:

print("計算 1+2+...+100 的結果為:")
# 保存累加結果的變數
result = 0
# 逐個獲取從 1 到 100 這些值,並做累加操作
for i in range(101):
    result += i
print(result)

運行結果如下:

計算 1+2+...+100 的結果為:
5050

Tips:range(101)可以用來產生0到100範圍的整數,需要註意的是取不到101。

練習

1~100之間的偶數求和

sum = 0
for x in range(2, 101, 2):
    sum += x
print(sum)  # Returns '2550'

輸入一個正整數判斷它是不是素數

from math import sqrt

num = int(input('請輸入一個正整數: '))
end = int(sqrt(num))
is_prime = True
for x in range(2, end + 1):
    if num % x == 0:
        is_prime = False
        break
if is_prime and num != 1:
    print('%d是素數' % num)
else:
    print('%d不是素數' % num)

break語句

有一個捷徑,讓執行提前跳出while迴圈子句。如果執行遇到break語句,就會馬上退出while迴圈子句。在代碼中,break語句僅包含break關鍵字。
break用於完全結束一個迴圈,跳出迴圈體。不管是哪種迴圈,一旦在迴圈體中遇到break,系統就將完全結束該迴圈,開始執行迴圈之後的代碼。

例如:

for i in range(0, 10) :
    print("i的值是: ", i)
    if i == 2 :
        # 執行該語句時將結束迴圈
        break

運行的結果為:

i的值是:  0
i的值是:  1
i的值是:  2

continue語句

break語句相比,continue語句的作用則沒有那麼強大,它只能終止本次迴圈而繼續執行下一次迴圈。

例如:

for i in range(0, 3 ) :
    print("i的值是: ", i)
    if i == 1 :
        # 忽略本次迴圈的剩下語句
        continue
    print("continue後的輸出語句")

運行結果如下:

i的值是:  0
continue後的輸出語句
i的值是:  1
i的值是:  2
continue後的輸出語句

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

-Advertisement-
Play Games
更多相關文章
  • 利用深度優先遍歷和遞歸 var acceptUnitNodes = null;//接收單位樹形數據 function findParentNode(ids){ //ids 是子節點數組 var parentNodes = [];//所有父節點 var forfun = function (id,no ...
  • urls urls中使用 1 urlpatterns = [ 2 path('admin/', admin.site.urls), 3 path('polls/', include('polls.urls', namespace='polls')), 4 ] View Code 運行後報錯,錯誤代碼 ...
  • 一、操作系統環境 可通過以下命令來查看操作系統的具體版本,本例中採用的是CentOS 7.6。一般來說,CentOS中預設已經安裝有python2.x,因為有一些系統命令可能會需要用到python2,所以不能卸載。我們只需再安裝python3.x即可。 # cat /etc/redhat-relea ...
  • 學習電腦組成原理有什麼用? 從StackOverFlow上一個很經典的問題說起 運行下麵的程式,然後比較加上Arrays.sort(data)這行之後,程式速度的變化 import java.util.Arrays; import java.util.Random; public class Te ...
  • 一、環境搭建 1、新建項目 (1)在” main”目錄下新建” java”與” resources”目錄 (2)將” java”設置為”Sources Root” (3)將” resources”設置為”Resources Root” (4)在”java”目錄下新建”StudyProject.Con ...
  • 我們平時使用的數字都是由 0~9 共十個數字組成的,例如 1、9、10、297、952 等,一個數字最多能表示九,如果要表示十、十一、二十九、一百等,就需要多個數字組合起來。 例如表示 5+8 的結果,一個數字不夠,只能”進位“,用 13 來表示;這時”進一位“相當於十,”進兩位“相當於二十。 因為 ...
  • Django rest framework源碼分析(1) 認證 一、基礎 1.1.安裝 兩種方式: github pip直接安裝 pip install djangorestframework 1.2.需要先瞭解的一些知識 理解下麵兩個知識點非常重要,django-rest-framework源碼中 ...
  • 今天給大家推薦一位在阿裡做Java的朋友給大家,他是公眾號【程式員書單】的作者黃小斜。 他的公眾號【程式員書單】這兩年來累積了200多篇優質原創文章,獨家原創的系列文章有《五分鐘學編程》系列,以及最近在大量創作的《程式員書單》系列文章,黃小斜在公眾號里也寫了很多使用的技術乾貨,他將其中的精華內容都整 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...