python使用對象模型來存儲數據,每個數據類型都有一個內置的類,每新建一個數據,實際就是一個對象,即全部數據都是對象。python
對象的3個特性:git
標準的數據類型:python3.x
數字、字符串、列表、元祖、字典api
其餘類型:數據結構
Null、文件、集合、函數、類、模塊app
數字類型分爲:int()整型、long()長整型、float()浮點型、 complex()複數、bool()布爾值iphone
python2.x區分整型,長整型 ; python3.x的整型和長整型,都是整型,無長整型。ide
查看數據類型:函數
1 c:\>python 2 Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32 3 Type "help", "copyright", "credits" or "license" for more information. 4 >>> print(type(12)) 5 <class 'int'> 6 >>> print(type(12.12)) 7 <class 'float'> 8 >>> print(type("xixihaha")) 9 <class 'str'>
布爾值:oop
1爲True()真;0爲False
>>> bool(1) True >>> bool(0) False >>>
a = 10 ,b = 20
操做符 | 描述符 | 示例 |
---|---|---|
+ | 加法 - 對操做符的兩側增長值 | a + b = 30 |
- | 減法 - 減去從左側操做數右側操做數 | a - b = -10 |
* | 乘法 - 相乘的運算符兩側的值 | a * b = 200 |
/ | 除 - 由右側操做數除以左側操做數 | b / a = 2 |
% | 模 - 由右側操做數和餘返回除以左側操做數 | b % a = 0 |
** | 指數- 執行對操做指數(冪)的計算 | a**b = 10 的冪 20 |
// | 取整除 - 操做數的除法,其中結果是將小數點後的位數被除去的商。 | 9//2 = 4 而 9.0//2.0 = 4.0 |
運算符 | 描述符 | 示例 |
---|---|---|
== | 檢查,兩個操做數的值是否相等,若是是則條件變爲真。 | (a == b) 不爲 true. |
!= | 檢查兩個操做數的值是否相等,若是值不相等,則條件變爲真。 | (a != b) 爲 true. |
<> | 檢查兩個操做數的值是否相等,若是值不相等,則條件變爲真。 | (a <> b) 爲 true。這個相似於 != 運算符 |
> | 檢查左操做數的值是否大於右操做數的值,若是是,則條件成立。 | (a > b) 不爲 true. |
< | 檢查左操做數的值是否小於右操做數的值,若是是,則條件成立。 | (a < b) 爲 true. |
>= | 檢查左操做數的值是否大於或等於右操做數的值,若是是,則條件成立。 | (a >= b) 不爲 true. |
<= | 檢查左操做數的值是否小於或等於右操做數的值,若是是,則條件成立。 | (a <= b) 爲 true. |
運算符 | 描述符 | 示例 |
---|---|---|
= | 簡單的賦值運算符,賦值從右側操做數左側操做數 | c = a + b將指定的值 a + b 到 c |
+= | 加法AND賦值操做符,它增長了右操做數左操做數和結果賦給左操做數 | c += a 至關於 c = c + a |
-= | 減AND賦值操做符,它減去右邊的操做數從左邊操做數,並將結果賦給左操做數 | c -= a 至關於 c = c - a |
*= | 乘法AND賦值操做符,它乘以右邊的操做數與左操做數,並將結果賦給左操做數 | c *= a 至關於 c = c * a |
/= | 除法AND賦值操做符,它把左操做數與正確的操做數,並將結果賦給左操做數 | c /= a 至關於= c / a |
%= | 模量AND賦值操做符,它須要使用兩個操做數的模量和分配結果左操做數 | c %= a is equivalent to c = c % a |
**= | 指數AND賦值運算符,執行指數(功率)計算操做符和賦值給左操做數 | c **= a 至關於 c = c ** a |
//= | 地板除,並分配一個值,執行地板除對操做和賦值給左操做數 | c //= a 至關於 c = c // a |
操做符 | 描述符 | 示例 |
---|---|---|
& | 二進制和複製操做了一下,結果,若是它存在於兩個操做數。 | (a & b) = 12 即 0000 1100 |
| | 二進制或複製操做了一個比特,若是它存在一個操做數中。 | (a | b) = 61 即 0011 1101 |
^ | 二進制異或運算符的副本,若是它被設置在一個操做數而不是兩個比特。 | (a ^ b) = 49 即 0011 0001 |
~ | 二進制的補運算符是一元的,並有「翻轉」位的效果。 | (~a ) = -61 即 1100 0011以2的補碼形式因爲帶符號二進制數。 |
<< | 二進位向左移位運算符。左操做數的值左移由右操做數指定的位數。 | a << 2 = 240 即 1111 0000 |
>> | 二進位向右移位運算符。左操做數的值是由右操做數指定的位數向右移動。 | a >> 2 = 15 即 0000 1111 |
運算符 | 描述 | 示例 |
---|---|---|
and | 所謂邏輯與運算符。若是兩個操做數都是真的,那麼則條件成立。 | (a and b) 爲 true. |
or | 所謂邏輯OR運算符。若是有兩個操做數都是非零而後再條件變爲真。 | (a or b) 爲 true. |
not | 所謂邏輯非運算符。用於反轉操做數的邏輯狀態。若是一個條件爲真,則邏輯非運算符將返回false。 | not(a and b) 爲 false. |
字符串:是一個有序的字符的集合,用於存儲和表示的基本的文本信息。
'內容'或 "內容" 中間包含的內容稱爲字符串
特性:
經常使用字符串的分割、長度、索引、切片
去除空格:
str.strip():刪除字符串當前行首尾的的空格
>>> a = ' hello ' >>> print(a.strip()) hello >>>
str.lstrip():刪除字符串左邊的空行,默認爲空格
>>> a = ' hello ' >>> print(a.lstrip()) hello >>>
str.lstrip():刪除字符串右邊的空行,默認爲空格
>>> a = ' hello ' >>> print(a.rstrip()) hello >>>
查找字符串
str.index()和str.find()功能相同,區別在於find()查找失敗會返回-1,不會影響程序運行,字符串通常用find,均可指定範圍查找。
>>> a = "hello world" >>> print(a.index('w',0,-1))#0 ,-1 從開始到結束,獲取w在字符串中的那個位置 6 >>> print(a.find('w',0,-1)) 6 >>> print(a.find('xx',0,-1)) #找不到該值 ,返回-1 -1 >>> print(a.index('xx',0,-1)) #直接報錯 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: substring not found >>>
字符串長度
>>> a = "hello world" >>> print(len(a)) 11 >>>
字符串大小寫轉換
>>> a = "Hello World" >>> #str.lower 把字符串所有轉換爲小寫 #str.upper 把字符串所有轉換爲大寫 #str.swapcase 把字符串中的大小寫互換 #str.capitalize 字符串的首字母大寫 >>>print(a.lower()) hello world >>> print(a.upper()) HELLO WORLD >>> print(a.swapcase()) hELLO wORLD >>> print(a.capitalize()) Hello world >>>
把字符串放入中心位置可指定長度及位置的兩邊字符
#str.center() >>> a='hello world' >>> print(a.center(40,'*')) **************hello world***************
字符串統計
#str.count() >>> a='hello world' >>> print(a.count('l')) #統計l在字符串中有幾個
3
字符串的測試、判斷函數,這一類在string模塊中沒有,這些函數返回的都是bool值
Str.startswith(prefix[,start[,end]]) #是否以prefix開頭 Str.endswith(suffix[,start[,end]]) #以suffix結尾 Str.isalnum() #是否全是字母和數字,並至少有一個字符 Str.isalpha() #是否全是字母,並至少有一個字符 Str.isdigit() #是否全是數字,並至少有一個字符 Str.isspace() #是否全是空白字符,並至少有一個字符 Str.islower() #S中的字母是否全是小寫 Str.isupper() #S中的字母是否即是大寫 Str.istitle() #S是不是首字母大寫的
字符串切片
str = '0123456789' print (str[0:3]) #截取第一位到第三位的字符 print (str[:] )#截取字符串的所有字符 print (str[6:]) #截取第七個字符到結尾 print (str[:-3] )#截取從頭開始到倒數第三個字符以前 print (str[2]) #截取第三個字符 print (str[-1] )#截取倒數第一個字符 print (str[::-1]) #創造一個與原字符串順序相反的字符串 print (str[-3:-1] )#截取倒數第三位與倒數第一位以前的字符 print (str[-3:]) #截取倒數第三位到結尾 print (str[0:10:2])#每隔一個,取一個值 print (str[0:10:3])#每隔2個,取一個值
字符串替換
#str.replace()默認替換字符串的全部值 >>> a = "Hello World" >>> print(a.replace('l','F'))#把字符串中的把l所有替換成F HeFFo WorFd >>> print(a.replace('l','F',1))#只替換字符串中的第一個l替換成F HeFlo World >>>
字符串分離
>>> a = "Hello World" >>> print(a.split())#默認按空格把字符串分爲兩個值,分離成列表,也能夠按照指定的值,分離 ['Hello', 'World']
字符串格式化str.format()和str.formap_map()
str.format()#用法介紹
#根據{name} ,特定的值來格式化(經常使用) test = 'i am {name}, age {a}' print(test) v = test.format(name='yangjian',a=19) print(v) #執行結果 i am {name}, age {a}#格式化以前的值 i am yangjian, age 19 #格式化以後的值 #根據格式化的循序,來傳入相應格式化順序的值 test = 'i am {0}, age {1}' print(test) v = test.format('xixi',19) print(v) #執行結果 i am {0}, age {1}#格式化以前的值 i am xixi, age 19#格式化以後的值
str.format_map()#用法介紹
#.format_map,傳入的值 {"name": 'yj', "a": 19} key:value 值來傳入
test = 'i am {name}, age {a}'
v1 = test.format(name='df',a=10)
v2 = test.format_map({"name": 'yj', "a": 19})
print(v1)
print(v2)
#執行結果
i am df, age 10
i am yj, age 19
str.expandtabs(tabsize=)
該方法返回字符串中的 tab 符號('\t')轉爲空格後,生成的新字符串。
tabsize -- 指定轉換字符串中的 tab 符號('\t')轉爲空格的字符數。
name = "name\tage\thobby\t" v = name.expandtabs(20) #20 能夠用tabsize=20表示 ,每一個\t轉換後有20個字符,沒有20個字符則用空格表示,
#若是該\t前面字符有20個,
#則\t須要轉換後要有20個空格的字符。 print(v) print(len(v)) #打印結果 name age hobby 60
name = "name\tage\t12345678\t"
res = name.expandtabs() #每一個\t 默認轉換後一共有8個字符,不夠用空格表示
print(len(res))
print(res)
str.join(iterable)按照可迭代(iterable)的對象,根據某個元素進行鏈接
#按照可迭代的對象,根據某個元素進行鏈接 #這裏是可迭代的元素,根據下劃線進行鏈接成一個字符串 name = "yangjian" n = "_".join(name) print(n) #打印結果 y_a_n_g_j_i_a_n
for循環語句,可用來遍歷任何序列的項目。
列
#!/usr/bin/env python #-*- coding:utf-8 -*- for i in range(10): print("loop",i)
輸出
1 loop 0 2 loop 1 3 loop 2 4 loop 3 5 loop 4 6 loop 5 7 loop 6 8 loop 7 9 loop 8 10 loop 9
每次遍歷,打印一個數字的序列,range()是生成一個數字序列
break和continue
1 for i in range(10): 2 if i>5: 3 break #跳出本層循環 4 print("loop:", i )
1 for i in range(10): 2 if i<5: 3 continue #跳出(結束)本次循環,直接進入下一次循環 4 print("loop:", i )
for else語法:若是for循環沒有被break終止(for循環正常走完),就執行else語句
列如:猜年齡,猜5次,猜正確了,退出;5次沒猜正確,就執行else
1 #!/usr/bin/env python 2 xixi_age = 20 3 for i in range(5): 4 guess_age = int(input("age:")) 5 if xixi_age == guess_age: 6 print("正確") 7 break 8 elif guess_age >20: 9 print("猜大了") 10 else: 11 print("猜小了") 12 else: 13 print("猜了太屢次")
while循環的判斷條件的爲True,會一直循環;當判斷條件爲false,循環結束
列如:猜想年齡10次
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 xixi_age = 20 5 count = 0 6 while count < 10: 7 guess_age = input("請輸入用戶年齡:") 8 if guess_age.isdigit(): 9 guess_age = int(guess_age) 10 else: 11 count +=1 12 continue 13 14 if xixi_age == guess_age: 15 print("正確") 16 break 17 elif guess_age >20: 18 print(" guess smaller") 19 else: 20 print(" guess bigger") 21 count +=1 22 else: 23 print("猜試了太屢次")
序列是python中最基本的數據結構,序列中的每一個元素都分配一個數字--他的位置,或索引,第一個元素的索引是0,第二元素的索引是1,依次類推。
列表是最經常使用的python的數據類型。
建立一個 列表,只要把逗號分隔的不通的數據項使用方括號括起來便可,以下;
1 list1 = ["a","b","c","d","e"] 2 list2 = ["math","chinese","englist",123,456,789]
len(object )能夠獲取某一對象的長度
列表的經常使用方法
增長:
1 list1.append("f") #在列表末尾,添加f 2 list1.insert(1,'g')#從列表中添加到索引(1)位置的後面
刪除:
1 list1.remove("e")#移除列表中的e 2 list1.pop(1) #默認刪除列表中的最後一個值,加上索引,是刪除相應索引的值,而且返回刪除的是哪一個值 3 del list1[3] #刪除列表的索引3的值
del能夠刪除某一對象。
修改
list1[0] = 'A' #修改列表的第一個值
查詢(切片:獲取某一段範圍的值)
1 print(list1[0:3]) #查詢列表中的前3個元素 2 print(list1[:])#查詢列表中的所有元素 3 print(list1[3:])#查詢第三個元素到結尾 4 print(list1[::2])#每隔一個,獲取一個元素 5 print(list1[::3])#每隔兩個,獲取一個元素 6 print(list1[0:5:2])#從0到5的,每隔一個,獲取一個元素
其餘的用法
print(list1.index('e')) #獲取該元素,在列表中的索引,(若是列表中有多個相同的元素,只會取找到的第一個元素的索引。 #固然也可獲取某段範圍的索引print(list1.index('d',2,5))) print(list1.count('a')) #統計列表中有幾個a(元素) #擴展 list1.extend(list2)#把列表2擴展到列表1 print (list1) ['a', 'b', 'c', 'd', 'e', 'f', 'math', 'chinese', 'englist', 123, 456, 789] #反轉 list1.reverse() print(list1) ['f', 'e', 'd', 'c', 'b', 'a'] #排序 list1 = ["a","c","b","e","d"] #python3.x系列的數據類型排序,字符串類型和數字類型不能一塊兒進行排序 list1.sort() print(list1) ['a', 'b', 'c', 'd', 'e'] #清空列表 list1.clear
複製:
1 # copy一份數據,copy原數據修改,新copy出來的數據不修改 2 list3 = list1.copy() 3 print(list3) 4 ['a', 'b', 'c', 'd', 'e']
程序練習
購物車程序:
需求:
1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 shop_list = [ 4 ['kindle',900], 5 ['mac',11000], 6 ['iphone',6000], 7 ['bike',1800], 8 ['open',180] 9 ] 10 buy_product = [] 11 while True: 12 salary = input("請輸入用戶工資:") 13 if salary.isdigit(): 14 salary = int(salary) 15 break 16 else: 17 continue 18 while True: 19 print("商品列表".center(50,'*')) 20 for index,i in enumerate(shop_list): 21 print(index,i) 22 # print(shop_list.index(i),i) 23 choose_number = input("請輸入商品編號[quit]:") 24 if choose_number.isdigit(): 25 choose_number = int(choose_number) 26 27 if choose_number < len(shop_list) and choose_number >=0: 28 p_item = shop_list[choose_number] 29 if salary >= p_item[1]: 30 buy_product.append(p_item) 31 salary -= p_item[1] 32 print("已購買的商品:{shop},當前的用戶餘額:{balance}元".format(shop = buy_product,balance = salary)) 33 else: 34 print("餘額不足,不能購買此商品,只有:{balance}元".format(balance=salary)) 35 else: 36 print("無效的商品編號") 37 38 39 elif choose_number == 'quit': 40 print("已購買商品".center(50,'*')) 41 for i in buy_product: 42 print(i) 43 print("用戶當前餘額:{balance}元".format(balance=salary)) 44 exit() 45 else: 46 print("無效的輸入")
未完待續*****