python之語法四連擊(選擇、字典、輸入輸出、迴圈)
python基礎回顧——語法三連擊篇
前言
在學習了前述篇章的語法知識之後,為了減小一些較為簡單的語法知識的冗餘度,本次篇章我將三個語法知識放在同一篇中回顧講述,分別是選擇判斷的if、字典以及輸入輸出表示。
if
條件測試
每條if 語句的核心都是一個值為True 或False 的表示式,這種表示式被稱為條件測試 。Python根據條件測試的值為True 還是False 來決定是否執行if 語句中的程式碼。如果條件測試的值為True ,Python就執行緊跟在if 語句後面的程式碼;如果為False ,Python就忽略這些程式碼,如果存在else則執行其後的程式碼。
檢查兩個物件是否相等
==
檢查兩個物件是否不相等
!=
數值比較判斷
>=
、>
、<
、<=
同時檢查多個判斷條件
- and,要檢查是否兩個條件都為True ,可使用關鍵字and 將兩個條件測試合而為一;如果每個測試都通過了,整個表示式就為True ;如果至少有一個測試沒有通過,整個表示式就為False 。
>>> a = 1 >>> b = 3 >>> if a > 0 and b < 4: ... print(a,b) ... else: ... print(b,a) ... 1 3 >>> if
為改善可讀性,可將每個測試物件都分別放在一對括號內,但並非必須這樣做。
- or, 也能夠讓你檢查多個條件,但只要至少有一個條件滿足,就能通過整個測試。僅當兩個測試都沒有通過時,使用or 的表示式才為False 。
>>> if a > 0 or b < 2: ... print(a,b) ... else: ... print(b,a) ... 1 3
- and,要檢查是否兩個條件都為True ,可使用關鍵字and 將兩個條件測試合而為一;如果每個測試都通過了,整個表示式就為True ;如果至少有一個測試沒有通過,整個表示式就為False 。
檢查特定物件是否在列表中
- 特定物件包含在列表中,要判斷特定的值是否已包含在列表中,可使用關鍵字
in
- 特定物件不包含在列表中,使用關鍵字
not in
。
>>> a 1 >>> b 3 >>> list = [1,2,3,4,5] >>> a in list True >>> b not in list False
- 特定物件包含在列表中,要判斷特定的值是否已包含在列表中,可使用關鍵字
布林值
True
和False
,真與假,空字串為假,非空字串為真,非0的數為真。
if語句
簡單if語句
if conditional_test: do something
if-else語句
if-else 語句塊類似於簡單的if 語句,但其中的else 語句讓你能夠指定條件測試未通過時要執行的操作。if conditional_test: do something else: do something else
if-elif-else語句
Python只執行if-elif-else 結構中的一個程式碼塊,它依次檢查每個條件測試,直到遇到通過
了的條件測試。測試通過後,Python將執行緊跟在它後面的程式碼,並跳過餘下的測試。if conditional_test_0: do something elif conditional_test_1: do something else: do something else
else
在不需要時即條件都是需要明確符合情況下是可以省略的,也可以不止一個elif
模組,可以多個明確條件的elif
模組進行使用。
程式碼格式
在條件測試的格式設定方面,PEP 8提供的唯一建議是,在諸如== 、>= 和<= 等比較運算子兩邊各新增一個空格,例如,if age < 4:
要比if age<4:
好。
字典
字典是python又一重要的資料結構,和前述篇章講到的列表、元組等都不相同,字典的儲存形式是鍵值對的形式,每個鍵 都與一個值相關聯,你可以使用鍵來訪問與之相關聯的值。與鍵相關聯的值可以是數字、字串、列表乃至字典。事實上,可將任何Python物件用作字典中的值。
字典使用{}
進行定義,鍵—值 對是兩個相關聯的值。指定鍵時,Python將返回與之相關聯的值。鍵和值之間用冒號分隔,而鍵—值對之間用逗號分隔。在字典中,你想儲存多少個鍵—值對都可以。
>>> dic = {'item1':1,'item2':2,'item3':3}
>>> dic['item2']
2
在定義字典中會發現,在初始化字典中出現相同鍵
的名字但是值
對應不同,並不會像列表那樣重複儲存,而是將已存在的相同鍵
的值更新為最新數值,可直接理解為覆蓋已有的鍵值對,即對字典進行修改。
>>> dict = {'item1':1,'item2':2}
>>> dict['item3']=3
>>> dict
{'item1': 1, 'item2': 2, 'item3': 3}
>>> dict['item1']=11
>>> dict
{'item1': 11, 'item2': 2, 'item3': 3}
刪除鍵值對
刪除字典元素使用del
語句,刪除字典元素時需要指明對應的鍵
。>>> del dict['item2'] >>> dict {'item1': 11, 'item3': 3}
遍歷字典
遍歷鍵值對
>>> for key,value in dict.items(): ... print("key:"+key) ... print("value:"+str(value)) ... key:item1 value:11 key:item3 value:3
遍歷鍵值對需要字典方法
items()
,從字典中獲取鍵值對列表,如下:>>> dict.items() dict_items([('item1', 11), ('item3', 3)])
遍歷鍵
>>> dict.keys() dict_keys(['item1', 'item3'])
遍歷字典的鍵,而不需要對應的值時,使用字典方法
keys()
可以獲取到字典的所有鍵,而在遍歷字典中python預設會遍歷所有的鍵,因此如果在熟悉字典之後有時也可省略keys()
方法,當然為了讓程式碼更為清晰,我建議還是保留。
需要對鍵進行排序,可以使用sorted()
方法:>>> dict['item0']=0 >>> dict {'item1': 11, 'item3': 3, 'item0': 0} >>> sorted(dict.keys()) ['item0', 'item1', 'item3']
遍歷值
>>> dict.values() dict_values([11, 3, 0])
遍歷字典中的值而不需要鍵可以使用
values()
方法,而對於一些情況下鍵的值是相同的,而不需要鍵時重複值可能需要處理且不需要值的數量只是針對值的內容,可以使用set
集合,set與列表相似但是元素不能重複。>>> dict['item4']=11 >>> dict {'item1': 11, 'item3': 3, 'item0': 0, 'item4': 11} >>> set(dict.values()) {3, 0, 11}
巢狀
巢狀是指不同資料結構之間的相互包含,如字典包含列表,元組包含列表等。字典列表(列表中儲存字典)
>>> list = [] >>> for i in range(10): ... list.append({'item':1,'item2':2}) ... >>> list [{'item': 1, 'item2': 2}, {'item': 1, 'item2': 2}, {'item': 1, 'item2': 2}, {'item': 1, 'item2': 2}, {'item': 1, 'item2': 2}, {'item': 1, 'item2': 2}, {'item': 1, 'item2': 2}, {'item': 1, 'item2': 2}, {'item': 1, 'item2': 2}, {'item': 1, 'item2': 2}] >>> list[0] {'item': 1, 'item2': 2}
將字典作為列表的元素,對多個同類型物件進行管理有幫助。
字典中儲存列表
當字典元素需要多個值進行儲存時可以使用列表作為字典元素進行儲存,favorite_languages = { 'jen': ['python', 'ruby'], 'sarah': ['c'], 'edward': ['ruby', 'go'], 'phil': ['python', 'haskell'], } for name, languages in favorite_languages.items(): print("\n" + name.title() + "'s favorite languages are:") for language in languages: print("\t" + language.title())
注意 列表和字典的巢狀層級不應太多。如果巢狀層級比前面的示例多得多,很可能有更簡單的解決問題的方案。
- 字典中儲存字典
users = { 'aeinstein': { 'first': 'albert', 'last': 'einstein', 'location': 'princeton', }, 'mcurie': { 'first': 'marie', 'last': 'curie', 'location': 'paris', }, }
輸入輸出
在實際使用的應用中都是為了滿足使用者的需求,便少不了與使用者的互動,而輸出已經很熟悉了,而輸入正是互動的另一重點。
input(),輸入
最簡單的輸入互動
message = input("Tell me something, and I will repeat it back to you: ") print(message)
函式input() 接受一個引數:即要向用戶顯示的提示 或說明,讓使用者知道該如何做。在這個示例中,Python執行第1行程式碼時,使用者將看到提示Tell me something, and I will repeat it back to you: 。程式等待使用者輸入,並在使用者按回車鍵後繼續執行。輸入儲存在變數message 中,接下來的print(message) 將輸入呈現給使用者:
Tell me something, and I will repeat it back to you: Hello everyone! Hello everyone!
有時候,提示可能超過一行,例如,你可能需要指出獲取特定輸入的原因。在這種情況下,可將提示儲存在一個變數中,再將該變數傳遞給函式input() 。這樣,即便提示超過一行,input() 語句也非常清晰。
prompt = "If you tell us who you are, we can personalize the messages you see." prompt += "\nWhat is your first name? " name = input(prompt) print("\nHello, " + name + "!")
數值輸入
使用int()
方法將輸入的字串轉為整數,因為使用input方法輸入的內容都是字串格式,當需要其他型別的物件時需要進行轉換格式。
>>> age=input("age=")
age=18
>>> int(age)
18
>>> age
'18'
>>> type(age)
<class 'str'>
>>> type(int(age))
<class 'int'>
Python 2.7,應使用函式raw_input() 來提示使用者輸入。這個函式與Python 3中的input() 一樣,也將輸入解讀為字串。
Python 2.7也包含函式input() ,但它將使用者輸入解讀為Python程式碼,並嘗試執行它們。因此,最好的結果是出現錯誤,指出Python不明白輸入的程式碼;而最糟的結果是,將執行你原本無意執行的程式碼。如果你使用的是Python 2.7,請使用raw_input() 而不是input() 來獲取輸入。
while迴圈
之前的回顧內容中應用過for迴圈,while迴圈可表示為:
while conditional_test:
do something
迴圈條件也可以是一個標誌位符號,通過互動方式由使用者決定是否結束迴圈,通過定義一個變數,一般該變數值為布林值即True和False,進行是否執行迴圈的判斷依據,
prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "
active = True
while active:
message = input(prompt)
if message == 'quit':
active = False
else:
print(message)
break
要立即退出while 迴圈,不再執行迴圈中餘下的程式碼,也不管條件測試的結果如何,可使用break語句。break 語句用於控制程式流程,可使用它來控制哪些程式碼行將執行,哪些程式碼行不執行,從而讓程式按你的要求執行你要執行的程式碼。
continue
要返回到迴圈開頭,並根據條件測試結果決定是否繼續執行迴圈,可使用continue 語句,它不像break 語句那樣不再執行餘下的程式碼並退出整個迴圈。
while迴圈處理字典和列表
通過迴圈及標誌位判斷進行互動,不斷執行列表或字典操作,如刪除、寫入等。
#迴圈刪除列表重複元素
pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
print(pets)
while 'cat' in pets:
pets.remove('cat')
print(pets)
#迴圈寫入字典元素
responses = {}
# 設定一個標誌,指出調查是否繼續
polling_active = True
while polling_active:
# 提示輸入被調查者的名字和回答
name = input("\nWhat is your name? ")
response = input("Which mountain would you like to climb someday? ")
# 將答卷儲存在字典中
responses[name] = response
# 看看是否還有人要參與調查
repeat = input("Would you like to let another person respond? (yes/ no) ")
if repeat == 'no':
polling_active = False
# 調查結束,顯示結果
print("\n--- Poll Results ---")
for name, response in responses.items():
print(name + " would like to climb " + response + ".")
——————
小結
本章節講述的內容較之前的篇章多了一點,但是都是較為基礎的python結構和語法,其中選擇語句與迴圈語句多次使用便能熟悉,字典以及列表、集合等資料結構的使用需要更多的練習,可以結合巢狀的思想,加入迴圈和判斷作為遍歷和選擇,從而加深,尤其是字典是鍵值對形式的元素儲存方式,在呼叫等方面與列表還是不同的,共勉。
相關推薦
python之語法四連擊(選擇、字典、輸入輸出、迴圈)
python基礎回顧——語法三連擊篇 前言 在學習了前述篇章的語法知識之後,為了減小一些較為簡單的語法知識的冗餘度,本次篇章我將三個語法知識放在同一篇中回顧講述,分別是選擇判斷的if、字典以及輸入輸出表示。 if 條件測試 每條if 語
Python之路-文件操作(py)
句柄 接口 編碼 操作 strong span 操作系統 使用 color 文件操作的基本步驟: 1.打開文件:f=open(‘filename‘),with open(‘filename‘) as f 2.操作文件:增,刪,改,查 3.關閉文件:f.close
洛谷 P1618 三連擊(升級版)
span main 比例 pre color clu 輸出 std mut 題目描述 將1,2,…,9共9個數分成三組,分別組成三個三位數,且使這三個三位數的比例是A:B:C,試求出所有滿足條件的三個三位數,若無解,輸出“No!!!”
python之多並發socket(zz)
請求 mixin reading odin read 處理 exceptio col recv 本文轉載自:http://www.cnblogs.com/bainianminguo/p/7337210.html 先看socket多並發的服務端的代碼,這裏是用多線程實現的多並
Python之系統shell交互(subprocess)
pycharm tar 命令行 安全 false resolv turn 等價 如何 os與commands模塊 subprocess模塊 subprocess.Popen類 總結 我們幾乎可以在任何操作系統上通過命令行指令與操作系統進行交互,比如Linux平臺下的sh
運維學python之爬蟲高級篇(六)scrapy模擬登陸
markdown inux ins com 是否 準備 配置 獲取圖片 con 上一篇介紹了如何爬取豆瓣TOP250的相關內容,今天我們來模擬登陸GitHub。 1 環境配置 語言:Python 3.6.1 IDE: Pycharm 瀏覽器:firefox 抓包工具:fi
python之輕松玩轉×××(wechat)機器人
×××機器人 python 機器人 ××× python的環境為python3,搭建環境這裏就不說了,之前的文章裏有 首先安裝一個python的×××庫 pip install -U wxpy 下面放出源碼: #!/usr/bin/env python3 # coding: utf-8
Python之初始面向對象(3--5)
修改 面向 import agg 引用 結果 打了 人物 元組 面向過程 VS 面向對象 : 面向過程的優缺點: 優點是:極大的降低了寫程序的復雜度,只需要 順著要執行的步驟,堆疊代碼即可。 缺點是:一套流水線或者流程就是用來解決一個問題,代碼牽一發而動全身。 面向對象的優
python之編寫登陸接口(第一天)
splay readlines 裏的 split 不存在 file mage AI else 作業:編寫登陸接口 輸入用戶名密碼 認證成功後顯示歡迎信息 輸錯三次後鎖定 帳號文件account.txt內容如下: sam 123 david 12 kevin 1
Python之 並發編程(3-19)
tool 工業 主存 軟件 個人計算機 應用程序 調用接口 隔離 總結 1946年第一臺計算機誕生--20世紀50年代中期,計算機工作還在采用手工操作方式。此時還沒有操作系統的概念。 程序員將對應於程序和數據的已穿孔的紙帶(或卡片)裝入輸入機,然
Python學習【第2篇】:Python之數據類型(2)
append 但是 iss 代碼 key 常用方法 uber ner ces 元組 #為何要有元組,存放多個值,元組不可變,更多的是用來做查詢 t=(1,[1,3],‘sss‘,(1,2)) #t=tuple((1,[1,3],‘sss‘,(1,2))) #
Python之進程同步控制(鎖信號量事件 )、進程間通信——隊列和管道
load 很快 容器 數據安全 全部 傳遞 幫我 之前 引入 進程同步(multiprocess.Lock、multiprocess.Semaphore、multiprocess.Event) 鎖 —— multiprocess.Lock 通過剛剛的學習,我們千方百計實現了
Python之模塊與包(下)
dir 模塊 關於 mode 二層 man manage 組織 否則 1、什麽是包 #官網解釋 Packages are a way of structuring Python’s module namespace by using “dotte
三連擊...(升級版)
ring 簡便 clas tdi color ++ for end cst 綜合了一下題解的,比較簡便。 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm>
Python之網絡編程(requests模塊)
pymongo 信息 use {} 編程 port isp uid for 一、requests模塊的基本方法 import requests 1.res = requests.get(url,params={‘stu_name‘:‘小黑‘}) #發送get請求,傳參k
【轉】Python之數據序列化(json、pickle、shelve)
大數 保密 不兼容 air shelf pickle 優點 訪問問題 josn 【轉】Python之數據序列化(json、pickle、shelve) 本節內容 前言 json模塊 pickle模塊 shelve模塊 總結 一、前言 1. 現
Python之爬蟲-- cookie & session(二)
這一片是繼 《Python之爬蟲-- cookie & session》這一篇之後在網上找到的一篇小練習,也是對cookie有更深的認識 一、為什麼要使用Cookie Cookie,指某些網站為了辨別使用者身份、進行session跟蹤而
python之scrapy(四)downloader middlewares的用法
下載中介軟體是處於引擎(Engine)和下載器(DownLoader))之間的一層元件,可以有多個下載中介軟體被載入執行。 當引擎傳遞請求給下載器的過程中,下載中介軟體可以對請求進行處理 (例如增加http header資訊,增加proxy資訊等); 在
python之程序間的通訊(queue,pipe,Manager)
不同程序間記憶體是不共享的,要想實現兩個程序間的資料交換,可以用多程序裡的Queue來解決: Queues 使用方法跟threading裡的queue差不多,注意在執行的時候,queue是一個備份,而不是原來的queue,不過實現了資料共享。 from multiprocessing i
P1008_三連擊(JAVA語言)
/* * 題目描述 將1,2,⋯,9共9個數分成3組, 分別組成3個三位數,且使這3個三位數構成1:2:3的比例,試求出所有滿足條件的3個三位數。 輸入輸出格式 輸入格式: 木有輸入 輸出格式: 若干行,每行3個數字。按照每行第1個數字升序排列。 */ publi