day2(老男孩-Python3.5-S14期全棧開發)

做者:趙俊            發佈日期:2019/11/5html

1、模塊初識java

import sys
'''默認在當前目錄下找模塊,找不到再去python環境變量中尋找''' print(sys.path)#打印環境變量 print(sys.argv)#是一個參數列表,這個列表存放着從外界獲取到的參數(可能有多個)
import os

#cmd_res = os.system("dir")#執行命令,不保存結果,輸出到屏幕
#print(cmd_res)#返回0表明執行成功,返回1表明執行失敗

cmd_res = os.popen("dir").read() #執行命令,將結果保存在內存中,要取回內容用read方法
print(cmd_res)
os.mkdir("zj")#當前目錄下建立一個zj目錄

 

2、pyc是什麼python

1. Python是一門解釋型語言?git

我初學Python時,聽到的關於Python的第一句話就是,Python是一門解釋性語言,我就這樣一直相信下去,直到發現了*.pyc文件的存在。若是是解釋型語言,那麼生成的*.pyc文件是什麼呢?c應該是compiled的縮寫纔對啊!api

爲了防止其餘學習Python的人也被這句話誤解,那麼咱們就在文中來澄清下這個問題,而且把一些基礎概念給理清。數組

  

2. 解釋型語言和編譯型語言 app

計算機是不可以識別高級語言的,因此當咱們運行一個高級語言程序的時候,就須要一個「翻譯機」來從事把高級語言轉變成計算機能讀懂的機器語言的過程。這個過程分紅兩類,第一種是編譯,第二種是解釋。iphone

編譯型語言在程序執行以前,先會經過編譯器對程序執行一個編譯的過程,把程序轉變成機器語言。運行時就不須要翻譯,而直接執行就能夠了。最典型的例子就是C語言。ide

解釋型語言就沒有這個編譯的過程,而是在程序運行的時候,經過解釋器對程序逐行做出解釋,而後直接運行,最典型的例子是Ruby。函數

經過以上的例子,咱們能夠來總結一下解釋型語言和編譯型語言的優缺點,由於編譯型語言在程序運行以前就已經對程序作出了「翻譯」,因此在運行時就少掉了「翻譯」的過程,因此效率比較高。可是咱們也不能一律而論,一些解釋型語言也能夠經過解釋器的優化來在對程序作出翻譯時對整個程序作出優化,從而在效率上超過編譯型語言。

此外,隨着Java等基於虛擬機的語言的興起,咱們又不能把語言純粹地分紅解釋型和編譯型這兩種。

用Java來舉例,Java首先是經過編譯器編譯成字節碼文件,而後在運行時經過解釋器給解釋成機器文件。因此咱們說Java是一種先編譯後解釋的語言。

 

3. Python究竟是什麼 

其實Python和Java/C#同樣,也是一門基於虛擬機的語言,咱們先來從表面上簡單地瞭解一下Python程序的運行過程吧。

當咱們在命令行中輸入python hello.py時,實際上是激活了Python的「解釋器」,告訴「解釋器」:你要開始工做了。但是在「解釋」以前,其實執行的第一項工做和Java同樣,是編譯。

熟悉Java的同窗能夠想一下咱們在命令行中如何執行一個Java的程序:

javac hello.java

java hello

 

只是咱們在用Eclipse之類的IDE時,將這兩部給融合成了一部而已。其實Python也同樣,當咱們執行python hello.py時,他也同樣執行了這麼一個過程,因此咱們應該這樣來描述Python,Python是一門先編譯後解釋的語言。

4. 簡述Python的運行過程

在說這個問題以前,咱們先來講兩個概念,PyCodeObject和pyc文件。

咱們在硬盤上看到的pyc天然沒必要多說,而其實PyCodeObject則是Python編譯器真正編譯成的結果。咱們先簡單知道就能夠了,繼續向下看。

當python程序運行時,編譯的結果則是保存在位於內存中的PyCodeObject中,當Python程序運行結束時,Python解釋器則將PyCodeObject寫回到pyc文件中。

當python程序第二次運行時,首先程序會在硬盤中尋找pyc文件,若是找到,則直接載入,不然就重複上面的過程。

因此咱們應該這樣來定位PyCodeObject和pyc文件,咱們說pyc文件實際上是PyCodeObject的一種持久化保存方式。

3、python的基本數據類型

一、數字

2 是一個整數的例子。
長整數 不過是大一些的整數。
3.23和52.3E-4是浮點數的例子。E標記表示10的冪。在這裏,52.3E-4表示52.3 * 10-4。
(-5+4j)和(2.3-4.6j)是複數的例子,其中-5,4爲實數,j爲虛數,數學中表示覆數是什麼?。

int(整型)

  在32位機器上,整數的位數爲32位,取值範圍爲-2**31~2**31-1,即-2147483648~2147483647
  在64位系統上,整數的位數爲64位,取值範圍爲-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(長整型)
  跟C語言不一樣,Python的長整數沒有指定位寬,即:Python沒有限制長整數數值的大小,但實際上因爲機器內存有限,咱們使用的長整數數值不可能無限大。
  注意,自從Python2.2起,若是整數發生溢出,Python會自動將整數數據轉換爲長整數,因此現在在長整數數據後面不加字母L也不會致使嚴重後果了。
float(浮點型)
       先掃盲 http://www.cnblogs.com/alex3714/articles/5895848.html 
  浮點數用來處理實數,即帶有小數的數字。相似於C語言中的double類型,佔8個字節(64位),其中52位表示底,11位表示指數,剩下的一位表示符號。
complex(複數)
  複數由實數部分和虛數部分組成,通常形式爲x+yj,其中的x是複數的實數部分,y是複數的虛數部分,這裏的x和y都是實數。
注:Python中存在小數字池:-5 ~ 257
 
二、布爾值
  真或假
  1 或 0
  True或False(首字母大寫)
三、字符串
"hello world"
萬惡的字符串拼接:
  python中的字符串在C語言中體現爲是一個字符數組,每次建立字符串時候須要在內存中開闢一塊連續的空,而且一旦須要修改字符串的話,就須要再次開闢空間,萬惡的+號每出現一次就會在內從中從新開闢一塊空間。
字符串格式化輸出
1
2
3
4
name  =  "alex"
print  "i am %s "  %  name
  
#輸出: i am alex

PS: 字符串是 %s;整數 %d;浮點數%f

字符串經常使用功能:
  • 移除空白
  • 分割
  • 長度
  • 索引
  • 切片
四、列表
建立列表:
1
2
3
name_list  =  [ 'alex' 'seven' 'eric' ]
name_list =  list ([ 'alex' 'seven' 'eric' ])

基本操做:

  • 索引
  • 切片
  • 追加
  • 刪除
  • 長度
  • 切片
  • 循環
  • 包含
五、元組(不可變列表)
建立元組:
1
2
3
ages  =  ( 11 22 33 44 55 )
ages  =  tuple (( 11 22 33 44 55 ))
 
六、字典(無序)
建立字典:
1
2
3
person  =  { "name" "mr.wu" 'age' 18 }
person  =  dict ({ "name" "mr.wu" 'age' 18 })

經常使用操做:

  • 索引
  • 新增
  • 刪除
  • 鍵、值、鍵值對
  • 循環
  • 長度

七、bytes數據類型

python3裏不會以任何隱式的方式混應str和bytes

字符串能夠編碼成字節包,字節包能夠解碼成字符串

msg = "我愛北京天安門"
msg = msg.encode("utf-8")
print(msg)
msg = b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
msg = msg.decode("utf-8")
print(msg)

 

4、列表的使用

 

 1 #Author:ZHJ
 2 names = ["唐僧","孫悟空","豬八戒","沙和尚","白龍馬","白骨精","蜘蛛精","牛魔王","沙和尚"]
 3 #查詢
 4 print(names)
 5 print(names[0]) #取出列表中對應索引的內容
 6 print(names[4:6]) #切片,範圍取值(左取右不取原則)
 7 print(names[-1]) #從右邊取
 8 print(names[-3:]) #倒數第三個日後全部
 9 print(names.index("白龍馬")) #返回指定內容的索引,查詢不到報錯
10 print(names.count("沙和尚")) #查詢指定內容的元素個數
11 
12 #增長
13 names.append("蜈蚣精") #添加到列表的最末端
14 names.insert(2,"蛤蟆精") #插入到指定索引的位置,其餘元素日後移動
15 print(names)
16 
17 #改動
18 names[0] = "唐三藏" #改動指定索引的元素內容
19 names.reverse() #翻轉列表
20 names.sort() #排序
21 print(names)
22 
23 #刪除
24 names.remove("蛤蟆精") #刪除指定內容的元素,其餘元素自動挪動
25 del names[0] #刪除指定索引的元素,其餘元素自動挪動
26 names.pop() #刪除指定索引的元素,其餘元素自動挪動,不指定索引,默認刪除最後一個
27 #names.clear() #清除列表
28 #del names  #刪除列表這個變量
29 print(names)
30 
31 names2 = [1,2,3,4]
32 names.extend(names2) #合併兩個列表
33 print(names)

複製功能使用較少

列表的copy是淺複製,只複製第一層

若是要深複製,就要導入模塊copy,而後使用names2 = copy.deepcopy(names)

 

列表循環

for i in names:
    print(i)

5、元祖和購物車程序

元組其實跟列表差很少,也是存一組數,只不是它一旦建立,便不能再修改,因此又叫只讀列表

語法:names = ("a","b","c")

它只有2個方法,一個是count,一個是index

 

購物車程序

 1 #Author:ZHJ
 2 commodity = [["iphone11",6889],["guitar",2450],["mac book",12000],["ipod",688],["ipad",2889]]
 3 seleted = []
 4 total = 0
 5 while True:
 6     salary = input("請輸入你的餘額:")
 7     if salary.isdigit():
 8         salary = int(salary)
 9         break
10     else:
11         print("\033[33;7m輸入非法,請輸入數字!\033[0m")
12 while True:
13     for i in commodity:
14         print("%s、%s"%(commodity.index(i),i))
15     num = input("輸入商品編號,回車加入購物車;輸q確認購買退出")
16     if num.isdigit():#輸入的商品編號是數字
17         num = int(num)#字符串強制轉整型
18         if num < len(commodity):#保證輸入的編號在範圍內
19             print("商品" + commodity[num][0] + "加入購物車")
20             seleted.append(commodity[num])#選擇商品加入購物車
21         else:
22             print("你輸入的編號不在庫裏")
23     else:#輸入的不是數字
24         if num == "q":
25             for i in seleted:
26                 total = total + i[1]
27             if total <= salary:
28                 salary = salary-total
29                 print("已購買商品",seleted)
30                 print("餘額爲:\033[31;1m%s\033[0m"%(salary))
31                 break
32             else:
33                 print("餘額不足,從新選擇商品")
34                 seleted.clear()#清空購物車,重新選擇
35                 total = 0#清空總價格

 

6、字符串經常使用操做

 

 1 #Author:ZHJ
 2 #帶下劃線的方法都是內部的,咱們沒法使用
 3 name = "hello world"
 4 print(name.capitalize()) #字符串第一個字母大寫
 5 print(name.count("l")) #統計字符串包含幾個指定字符
 6 print(name.center(50,"*")) #總共50個字符,不夠用指定字符填充,而且字符串居中
 7 print(name.endswith("ld")) #判斷字符串是否以指定字符結尾,返回True或False
 8 print(name.find("w")) #查找指定字符或字符串,在源字符串中開始位置的索引
 9 name = "hello world {age}"
10 print(name.format(age = 23)) #格式化字符串
11 print(name.format_map({"age" : 23})) #格式化字符串,用字典的方式
12 name = "helloworld在"
13 print(name.isalnum()) #是否包含特殊字符,包含爲False,反之爲True
14 print(name.isalpha()) #是否包含特殊字符和數字,包含爲False,反之爲True
15 name = "#¥@%@%@w"
16 print(name.isdecimal()) #是不是十進制
17 print(name.isdigit()) #是不是整數
18 print(name.isidentifier())#判斷是不是一個合法的標識符(變量名)
19 print(name.islower()) #是不是小寫
20 print("DFS".isupper()) #是否爲大寫
21 print(" 1 ".isspace()) #判斷是否是空格
22 print("Hello World".istitle()) #判斷是否是標題,每一個單詞首字母大寫就是標題
23 print("*".join(["1","2","3","4"])) #用指定字符拼接列表
24 print("hello world".ljust(50,"$")) #從左數指定數量字符,不夠在右邊填充指定字符
25 print("hello world".rjust(50,"$")) #從右數指定數量字符,不夠在左邊填充指定字符
26 print("SDASSAF".lower()) #把大寫變小寫
27 print("ssafsf".upper()) #把小寫變大寫
28 print(" qwe".lstrip()) #去除字符串左邊空格和回車
29 print("qwe ".rstrip()) #去除字符串右邊空格和回車
30 print("ss     ".strip()) #去除字符串兩邊空格和回車
31 p = str.maketrans("abcdefghijklm","~!@#$%^&*()_+") #後面字符替換前面字符顯示
32 print("abefmlj".translate(p))
33 
34 print("assfffad".replace("a","A",1)) #將a替換成A只替換指定個數
35 print("dfjlhkjl".rfind("l")) #查找最右邊那個指定字符,返回索引
36 print("1+2+3+4".split("+")) #以指定字符分割字符串爲列表
37 print("".splitlines()) # 以換行符來分割字符串爲列表
38 print("FFFfsf".swapcase()) #大寫轉小寫,小寫轉大寫
39 print("hello world".title()) #將字符串變成title
40 print("111".zfill(8)) #指定字符串長度,不夠用0填充

 

7、字典的使用

 

#Author:ZHJ
info = {
    "1101":"孫悟空",
    "1102":"豬八戒",
    "1103":"沙和尚"
}
print(info)
info["1101"] = "白骨精"
info["1104"] = "蜘蛛精"
print(info)
del info["1104"]
print(info)
info.pop("1103")
print(info)
print(info.get("1101")) #查找,有就返回,沒有就none
print("1101" in info) #判斷一個鍵是否在字典中
print(info.values()) #打印全部值
print(info.keys()) #打印全部鍵
print(info.setdefault("1101","牛魔王")) #若是有對應的鍵,則返回相應的值,若是沒有對應的鍵,則增長一個在字典中,並返回增長的值
print(info)
b = {1:2,2:3,"1101":"唐僧"}
info.update(b) #合併字典,有相同鍵就更改,沒有就添加
print(info)
print(info.items()) #字典轉列表
c = dict.fromkeys([1,2,3],["test",{"name":"jeck"}]) #初始化一個字典,在這種狀況下,有多層的狀況下,更改一個數據,其餘也更改
c[2][1]["name"] = "test1"
print(c)

#字典的循環
info = {
    "1101":"孫悟空",
    "1102":"豬八戒",
    "1103":"沙和尚"
}
for i in info:
    print(i,info[i])

 

8、做業

 購物車程序優化

用戶入口:

  一、商品信息存在文件裏

  二、已購商品,餘額記錄,訂單存儲(第一次進入,須要記錄餘額)

商家入口:

  一、能夠添加商品,修改商品價格

流程圖:

  

代碼:

  1 #Author:ZHJ
  2 commodity = []
  3 seleted = []
  4 total = 0
  5 userinfo = []
  6 balance = 0
  7 while True:
  8     commodity.clear()
  9     flag = input("請確認是否爲買家(y/n)?")
 10     if flag == "n":
 11         # print("賣家")
 12         signature = input("請輸入特徵碼:")
 13         if signature != "n":
 14             print("特徵碼錯誤!")
 15             continue
 16         else:
 17             file = open("commodity.txt")  # 讀取文件
 18             temp = file.read().splitlines()  # 以換行爲分割符分割爲列表
 19             file.close()
 20             for i in temp:
 21                 commodity.append(i.split("-"))
 22             for i, j in enumerate(commodity):
 23                 print("%s、%s ---> ¥%s" % (i, j[0], j[1]))
 24             name = input("請輸入商品名:")
 25             price = 0
 26             while True:
 27                 temp = input("請輸入價格:")
 28                 if temp.isdigit():
 29                     price = temp
 30                     break
 31                 else:
 32                     print("輸入價格有誤!")
 33                     continue
 34             # 判斷是修改仍是增長
 35             for i in commodity:
 36                 if i[0] == name:
 37                     i[1] = price
 38                     break
 39             else:
 40                 commodity.append([name, price])
 41             temp = ""
 42             for i in commodity:
 43                 # print(i)
 44                 temp = temp + i[0]+"-"+i[1] + "\n"
 45             # print(temp)
 46             file = open("commodity.txt","w")  # 讀取文件
 47             file.write(temp)  # 以換行爲分割符分割爲列表
 48             file.close()
 49             break
 50     elif flag == "y":
 51         file = open("user.txt")  # 讀取文件
 52         temp = file.read().splitlines()  # 以換行爲分割符分割爲列表
 53         file.close()
 54         for i in temp:
 55             userinfo.append(i.split("-"))
 56         # print(userinfo)
 57         user = input("請輸入用戶名:")
 58         for i in userinfo:
 59             if i[0] == user:
 60                 balance = i[1]
 61                 break
 62         else:
 63             balance = input("請輸入餘額!")
 64             userinfo.append([user, balance])
 65          # *************將添加的用戶信息寫入文件***************
 66         temp = ""
 67         for i in userinfo:
 68             # print(i)
 69             temp = temp + i[0] + "-" + i[1] + "\n"
 70             # print(temp)
 71         file = open("user.txt", "w")  # 讀取文件
 72         file.write(temp)  # 以換行爲分割符分割爲列表
 73         file.close()
 74         # *************將添加的用戶信息寫入文件***************
 75         print("總餘額爲:%s" % (balance))
 76         # ****************讀取商品文件,並打印在屏幕****************
 77         file = open("commodity.txt")  # 讀取文件
 78         temp = file.read().splitlines()  # 以換行爲分割符分割爲列表
 79         file.close()
 80         for i in temp:
 81             commodity.append(i.split("-"))
 82         for i, j in enumerate(commodity):
 83             print("%s、%s ---> ¥%s" % (i, j[0], j[1]))
 84         # **********************************************************
 85         while True:
 86             num = input("請選擇商品編號或按q退出:")
 87             if num == "q":
 88                 if total <= int(balance):
 89                     balance = int(balance) - total
 90                     file = open("user.txt")  # 讀取文件
 91                     temp = file.read().splitlines()  # 以換行爲分割符分割爲列表
 92                     file.close()
 93                     userinfo.clear()
 94                     for i in temp:
 95                         userinfo.append(i.split("-"))
 96                     for i in userinfo:
 97                         if i[0] == user:
 98                             i[1] = balance
 99                             break
100                     # *************將消費後的用戶信息寫入文件***************
101                     temp = ""
102                     for i in userinfo:
103                         # print(i)
104                         temp = temp + i[0] + "-" + str(i[1]) + "\n"
105                     file = open("user.txt", "w")  # 讀取文件
106                     file.write(temp)  # 以換行爲分割符分割爲列表
107                     file.close()
108                     # *************將消費後的用戶信息寫入文件***************
109                     # print(userinfo)
110                     print("能夠購買")
111                     break
112                 else:
113                     print("用戶餘額不足")
114             else:
115                 total = 0  # 每次添加商品時,清除總價
116                 if num.isdigit() and int(num) <= len(commodity):
117                     seleted.append(commodity[int(num)])
118                     # ************求已選列表中的商品價格總和**************
119                     for i in seleted:
120                         total = total + int(i[1])
121                     # ************求已選列表中的商品價格總和**************
122                     print(seleted)
123                     print(total)
124                 else:
125                     print("輸入非法數據")
126 
127     else:
128         print("鍵盤輸入錯誤!")

須要建立兩個txt文件以下格式

 

 

不用函數,真心亂

相關文章
相關標籤/搜索