python基礎之循環結構以及列表


python基礎之編譯器選擇,循環結構,列表

本節內容

  1. python IDE的選擇
  2. 字符串的格式化輸出
  3. 數據類型
  4. 循環結構
  5. 列表
  6. 簡單購物車的編寫

1.python IDE的選擇

IDE的全稱叫做集成開發環境(IDE,Integrated Development Environment )

常用的編程語言IDE開發工具有如下一些:

  1. VIM #經典的linux下的文本編輯器
  2. Emacs #linux 文本編輯器, 比vim更容易使用
  3. Eclipse # Java IDE,支持python, c ,c++
  4. Visual Studio # 微軟開發的 IDE, python,c++,java,C#
  5. notepad++ ,#windows下常用的文本編輯器,比原生notepad好用
  6. sublime python開發的
  7. Pycharm ,是主要用於python開發的ide

pycharm具有代碼補全,自動保存,語法檢查,多種語言支持(html,js,css等)等特性,使用pycharm能夠節省大量編碼時間,從而提高生產效率。 pycharm的一些設置這里就不做贅述了,網上百度一大把。。。本人也懶得貼那些圖片了。。。

2.python字符串的格式化輸出

python中字符串格式化輸出主要使用的有如下幾個占位符:

  1. %s占位符 占位字符串
  2. %d占位符 占位整形數據
  3. %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

 

列表的方法:

  1. append:在列表末尾追加新的對象,例如list.append(4)將4追加到list的末尾。
  2. count:統計某個元素在列表中出現的次數(只能統計當前層中List中的元素)例如list.count('a')
  3. extend:可以在列表的末尾追加另一個列表,和列表連接操作相似,但是列表連接操作返回一個新的列表,extend返回的是原來列表擴展后的列表,效率比列表連接操作高。例如list1.extend(list2)
  4. index:從列表中找到某個值第一個匹配項的索引位置例如list.index('a')
  5. insert:將對象插入到列表的指定位置,例如list.insert(3,'a')插入的位置在insert的參數中定義的位置,原先在該位置的值將依次往后移一位
  6. pop:移除列表中的一個元素(默認最后一個),並返回該元素的值。list.pop(3)就是將第四個位置的值刪除並返回該值。python中沒有入棧的方法,但是可以結合使用append和pop方法實現棧的功能(先進先出,后進先出)
  7. remove:移除列表中某個元素的第一個匹配項,list.remove('a')會移除掉第一個匹配的a,但是不管有沒有匹配到該元素都不會有返回值。
  8. reverse:將列表中的元素反向存放,list.reverse(),同樣沒有返回值。
  9. sort:在原位置的列表基礎上對列表進行排序,而不是返回一個排序好的副本。list.sort()該方法也沒有返回值。
  10. sorted:該方法對源列表進行排序,並返回一個新的排序好的列表副本,該操作將不會修改源列表的順序,list2=list1.sorted()
  11. 高級排序:如果想要自己定義排序規則可以定義一個函數,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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM