python基礎2(數據類型、數據運算、for循環、while循環、列表)

1.數據類型

python使用對象模型來存儲數據,每個數據類型都有一個內置的類,每新建一個數據,實際就是一個對象,即全部數據都是對象。python

對象的3個特性:git

  • 身份:即內存地址,能夠用id()來獲取
  • 類型:決定了該對象保存的類型,須要遵循什麼規則,可用type()來獲取該數據類型
  • 值:對象的保存的的真實數據

標準的數據類型:python3.x

數字、字符串、列表、元祖、字典api

其餘類型:數據結構

Null、文件、集合、函數、類、模塊app

1.1數字類型分類

數字類型分爲: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'>
type

布爾值:oop

1爲True()真;0爲False

>>> bool(1)
True
>>> bool(0)
False
>>>
bool

1.2數據運算

a = 10 ,b = 20

1.2.1算術運算

操做符 描述符 示例
+ 加法 - 對操做符的兩側增長值 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

 1.2.2比較運算

運算符 描述符 示例
== 檢查,兩個操做數的值是否相等,若是是則條件變爲真。 (a == b) 不爲 true.
!= 檢查兩個操做數的值是否相等,若是值不相等,則條件變爲真。 (a != b) 爲 true.
<> 檢查兩個操做數的值是否相等,若是值不相等,則條件變爲真。 (a <> b) 爲 true。這個相似於 != 運算符
> 檢查左操做數的值是否大於右操做數的值,若是是,則條件成立。 (a > b) 不爲 true.
< 檢查左操做數的值是否小於右操做數的值,若是是,則條件成立。 (a < b) 爲 true.
>= 檢查左操做數的值是否大於或等於右操做數的值,若是是,則條件成立。 (a >= b) 不爲 true.
<= 檢查左操做數的值是否小於或等於右操做數的值,若是是,則條件成立。 (a <= b) 爲 true.
 

1.2.3賦值運算

運算符 描述符 示例
= 簡單的賦值運算符,賦值從右側操做數左側操做數 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
 

1.2.4位運算

操做符 描述符 示例
& 二進制和複製操做了一下,結果,若是它存在於兩個操做數。 (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
 

1.2.5邏輯運算

運算符 描述 示例
and 所謂邏輯與運算符。若是兩個操做數都是真的,那麼則條件成立。 (a and b) 爲 true.
or 所謂邏輯OR運算符。若是有兩個操做數都是非零而後再條件變爲真。 (a or b) 爲 true.
not 所謂邏輯非運算符。用於反轉操做數的邏輯狀態。若是一個條件爲真,則邏輯非運算符將返回false。 not(a and b) 爲 false.
 

1.3字符串

字符串:是一個有序的字符的集合,用於存儲和表示的基本的文本信息。

'內容'或 "內容" 中間包含的內容稱爲字符串

特性:

  • 只能存放一個值
  • 不可變
  • 按照從左到右的順序定義字符集合,下標從0開始順序訪問,有序

 

經常使用字符串的分割、長度、索引、切片

去除空格:

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

 

1.4for循環

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
loop

每次遍歷,打印一個數字的序列,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("猜了太屢次")
View Code

1.5while循環

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("猜試了太屢次")
View Code

1.6 列表

序列是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
View Code

複製:

1 # copy一份數據,copy原數據修改,新copy出來的數據不修改
2 list3 = list1.copy()
3 print(list3)
4 ['a', 'b', 'c', 'd', 'e']

程序練習

購物車程序:

需求:

  1. 啓動程序後,讓用戶輸入工資,而後打印商品列表
  2. 容許用戶根據商品編號購買商品
  3. 用戶選擇商品後,檢測餘額是否夠,夠就直接扣款,不夠就提醒
  4. 可隨時退出,退出時,打印已購買商品和餘額
  5.  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("無效的輸入")
    View Code

未完待續*****

相關文章
相關標籤/搜索