python基礎之編譯器選擇,循環結構,列表
本節內容
- python IDE的選擇
- 字符串的格式化輸出
- 數據類型
- 循環結構
- 列表
- 簡單購物車的編寫
1.python IDE的選擇
IDE的全稱叫做集成開發環境(IDE,Integrated Development Environment )
常用的編程語言IDE開發工具有如下一些:
- VIM #經典的linux下的文本編輯器
- Emacs #linux 文本編輯器, 比vim更容易使用
- Eclipse # Java IDE,支持python, c ,c++
- Visual Studio # 微軟開發的 IDE, python,c++,java,C#
- notepad++ ,#windows下常用的文本編輯器,比原生notepad好用
- sublime python開發的
- Pycharm ,是主要用於python開發的ide
pycharm具有代碼補全,自動保存,語法檢查,多種語言支持(html,js,css等)等特性,使用pycharm能夠節省大量編碼時間,從而提高生產效率。 pycharm的一些設置這里就不做贅述了,網上百度一大把。。。本人也懶得貼那些圖片了。。。
2.python字符串的格式化輸出
python中字符串格式化輸出主要使用的有如下幾個占位符:
- %s占位符 占位字符串
- %d占位符 占位整形數據
- %f占位符 占位浮點型數據
舉個栗子:
1 print("this is %s num %d. the 5/3=%f." %("my",5,5/3)) 2 this is my num 5. the 5/3=1.666667.
至於更多的字符串格式化輸出內容等我有空再繼續補充,時間比較倉促。
3.數據類型
python中的數據類型主要分為如下幾種:
數字:
整型 python中的整形能表示的數字從2^31-1到-2^31之間,占用4個字節
長整型 超出整形表示之外的整數將被使用長整型來存儲
整型和長整型在python2中有區分,在python3中已經不區分整型和長整型,統一叫做整型了。
布爾類型:
True 真
False 假
字符串:
用單引號或者雙引號包裹起來的內容就是字符串
列表:
存儲一組數據,使用[]來表示
字典:
存儲一組key:value鍵值對的數據,使用{}表示
集合:
存儲的也是一組數據,但是和列表不同的是,集合中數據沒有相同的兩個數據,使用set()來定義集合
元祖: 存儲的也是一組數據,只是存儲在元祖(tuple)中的數據是不能被改變的,聲明該類型的數據使用(,)來實現
4.循環結構
其實在上一篇里面已經講了python中的循環結構,這里照搬過來了:
for循環語句,結構如下所示:
for 變量 in 可遍歷對象:
循環體內語句
else:
循環體后語句
其中需要注意的是for循環后面還跟了else語句,這個方式我只在python中見到過,目前我知道的一種用法就是當for循環正常執行結束后就會執行else中的語句,但是,當在循環體中使用break或者循環體異常結束時,else中的語句將不會被執行。
while循環語句,結構如下所示:
while 條件表達式:
循環體內語句
else:
循環體后語句
while循環中也存在else語句,和for循環中的else語句作用一樣,當while之后的條件表達式為真時,才會進入循環體內部執行,注意while循環語句可以一次都不被執行。
下面舉幾個例子來看看循環體結構的使用:
1 _user="abc123" 2 _passwd="abc123" 3 for i in range(3): 4 username=input("username:").strip() 5 password=input("password:").strip() 6 if username==_user and password==_passwd: 7 print("welcome %s" %username) 8 break 9 else: 10 print("invalid username or password!") 11 else: 12 print("拜拜!")
上面例子主要是為了展示for else結構的使用,當然,這種方式也可以通過使用flag的方式來實現:
1 _user="abc123" 2 _passwd="abc123" 3 passed_authentication=False 4 for i in range(3): 5 username=input("username:").strip() 6 password=input("password:").strip() 7 if username==_user and password==_passwd: 8 print("welcome %s" %username) 9 passed_authentication=True 10 break 11 else: 12 print("invalid username or password!") 13 if not passed_authentication: 14 print("拜拜!")
下面是展示while else循環結構的代碼:
1 _user="abc123" 2 _passwd="abc123" 3 count=0 4 while count<3: 5 username=input("username:").strip() 6 password=input("password:").strip() 7 if username==_user and password==_passwd: 8 print("welcome %s" %username) 9 break 10 else: 11 print("invalid username or password!") 12 count+=1 13 if count == 3: 14 flag=input("還想玩嗎?[y/n]") 15 if flag=="y": 16 count=0 17 else: 18 print("拜拜!")
在循環嵌套中,怎樣實現跳出多層嵌套循環呢?可以使用flag標記位來實現:
1 exit_flag = False 2 for i in range(10): 3 if i<5: 4 continue 5 print(i) 6 for j in range(10): 7 print("lever2:",j) 8 if j == 6: 9 exit_flag = True 10 break 11 if exit_flag: 12 break
好了,關於循環結構語句的補充就到這里了。
5.列表
列表是python里面很重要的一種數據類型,學好列表的使用,將有助於寫出高質量的代碼。
所有序列都可以進行某些特定操作,包括:索引(indexing)、分片(slicing)、加(adding)、乘(multiplying)以及檢查某元素是否屬於列表成員。
迭代:依次對序列中的每個元素重復執行某些操作。
序列的索引:通過元素在列表中的位置可以定位到該元素,這就是列表的索引,使用類似於list[0]對元素進行索引,索引0指向第一個元素。也可使用負數對元素進行索引,使用負數對元素索引時,列表中的最后一個元素由-1表示,例如list[-1]就是該列表的最后一個元素。
序列的分片:序列的分片操作需要提供兩個索引作為邊界,第一個索引的元素包含在分片內部,第二個索引的元素不包含在分片內部。例如需要取出列表中第三位到第五位的元素可以使用list[2:5],若分片所得部分包含列表的尾部可以將第二個索引置為空。例如list[3:],同樣,對於列表首部的元素也可以這樣,例如list[:-5]。 對於分片,還有一個步長的參數,該參數可以是隱式設置,隱式設置中,步長是1。分片操作按照該步長遍歷序列中元素。例如list[0:5:2]就是以步長為二遍歷出列表中從開頭到第五位元素。當然,步長也可以為負數,為負數時表示從右到左進行遍歷。
列表的加:列表可以進行相加,變成一個更大的列表list=list1+list2,但是限制是相同類型的列表才可以進行相加。雖然字符串也是列表,但是列表和字符串是無法直接相加的。
列表的乘:用一個數字乘以一個列表將會生成一個新的列表,該新列表內容江油老序列重復N次。列表內容為空可以使用None表示,list=[None]*10表示生成一個占用十個空位置的列表。
列表的成員資格:可使用in運算符檢查某元素是否是該列表的成員。其返回值是一個布爾類型的值,如果是該列表成員,則返回True,否則返回Flse。例如'a' in list操作。
列表的幾個內置函數:len、max和min是列表中的內置函數。len函數返回列表包含元素的數量。max和min函數分別返回列表中最大和最小的元素,列入len(list)、max(list)、min(list)
列表的操作
列表可以通過分片來實現增刪改查功能:
1 a=["wuchao","jinxin","xiaohu","sanpang","ligang"] 2 print(a[::1])#從開始到結尾切片輸出 3 print(a[:-1:])#從開始到倒數第二個切片輸出 4 print(a[::2])#從開始到結尾步長為2輸出 5 print(a[::-1])#列表反轉輸出 6 print(a[-1:0:-1])#從倒數第一個到順數第二個反轉輸出 7 print(a[1:1]=["xxx"])#在索引為1的位置插入數據 8 print(a[1:2]=[])#把列表中的索引為1的位置的值刪除 9 print(a[1:2]=["xxx"])#把列表中索引為1的位置的值改成xxx
列表的方法:
- append:在列表末尾追加新的對象,例如list.append(4)將4追加到list的末尾。
- count:統計某個元素在列表中出現的次數(只能統計當前層中List中的元素)例如list.count('a')
- extend:可以在列表的末尾追加另一個列表,和列表連接操作相似,但是列表連接操作返回一個新的列表,extend返回的是原來列表擴展后的列表,效率比列表連接操作高。例如list1.extend(list2)
- index:從列表中找到某個值第一個匹配項的索引位置例如list.index('a')
- insert:將對象插入到列表的指定位置,例如list.insert(3,'a')插入的位置在insert的參數中定義的位置,原先在該位置的值將依次往后移一位
- pop:移除列表中的一個元素(默認最后一個),並返回該元素的值。list.pop(3)就是將第四個位置的值刪除並返回該值。python中沒有入棧的方法,但是可以結合使用append和pop方法實現棧的功能(先進先出,后進先出)
- remove:移除列表中某個元素的第一個匹配項,list.remove('a')會移除掉第一個匹配的a,但是不管有沒有匹配到該元素都不會有返回值。
- reverse:將列表中的元素反向存放,list.reverse(),同樣沒有返回值。
- sort:在原位置的列表基礎上對列表進行排序,而不是返回一個排序好的副本。list.sort()該方法也沒有返回值。
- sorted:該方法對源列表進行排序,並返回一個新的排序好的列表副本,該操作將不會修改源列表的順序,list2=list1.sorted()
- 高級排序:如果想要自己定義排序規則可以定義一個函數,compare(x,y)當x<y時返回負數,x>y時返回正數,x=y則返回0定義好函數后可將該函數作為sort的參數傳遞進sort里面進行排序,另,sort還有兩個可選參數key和reverse,若需要使用則需通過關鍵字參數指定,key的值為在排序過程中使用的函數,例如list.sort(key=len)則排序方式為按照元素的長度進行排序。reverse的值為一個bool類型的值,如果為True則進行反向排序,默認是False例如list.sort(reverse=True)就是進行反向排序。
6.簡單購物車的編寫
需求如下:
1 購物車程序 2 salary = 5000 3 1. iphone6s 5800 4 2. mac book 9000 5 3. coffee 32 6 4. python book 80 7 5. bicyle 1500 8 >>>:1 9 余額不足,-3000 10 >>>:5 11 已加入bicyle 到你的購物車, 當前余額:3500 12 >>>:quit 13 您已購買一下商品 14 bicyle 1500 15 coffee 30 16 您的余額為:2970 17 歡迎下次光臨
代碼實現:
1 #!/usr/bin/env python 2 # encoding:utf-8 3 # __author__: huxianglin 4 # date: 2016-08-22 5 # blog: http://huxianglin.cnblogs.com/ http://xianglinhu.blog.51cto.com/ 6 7 def main(): 8 Commodity_list=[["iphone6s",5800],["mac book",9000],["coffee",32],["python book",80],["bicycle",1500]] 9 shopping_list=[] 10 welcome_msg=""" 11 ******************************** 12 *** 歡迎來到本商店購物 *** 13 ********************************""" 14 print(welcome_msg) 15 salary=None 16 while True: 17 salary=input("請輸入你的工資:") 18 if salary.isdigit(): 19 salary=int(salary) 20 break 21 else: 22 print("工資只能為數字。。。") 23 continue 24 for i in range(0,len(Commodity_list)): 25 print("\t%s. %s\t\t%s"%(i+1,Commodity_list[i][1],Commodity_list[i][0])) 26 while True: 27 customer_choose=input("請輸入要購買的商品編號,退出請輸入quit: ").strip() 28 if customer_choose=="quit": 29 print("您的購物清單為:") 30 for i in range(0,len(shopping_list)): 31 print("\t%s. %s\t\t%s"%(i+1,shopping_list[i][1],shopping_list[i][0])) 32 print("您的余額為:%s"%salary) 33 exit() 34 elif customer_choose.isdigit(): 35 if int(customer_choose) > len(Commodity_list): 36 print("您輸入的商品編號不在本系統中,請重新輸入。。。") 37 continue 38 if salary >= Commodity_list[int(customer_choose)-1][1]: 39 shopping_list.append(Commodity_list[int(customer_choose)-1]) 40 salary -= Commodity_list[int(customer_choose)-1][1] 41 print("%s已加入您的購物車,當前余額:%s"%(Commodity_list[int(customer_choose)-1][0],salary)) 42 else: 43 print("余額不足,%s"%(salary-Commodity_list[int(customer_choose)-1][1])) 44 continue 45 else: 46 print("您輸入有誤,請重新輸入。。。") 47 48 if __name__=="__main__": 49 main()