1.變量
1.聲明變量(定義) --假的聲明
說明:變量名 - 標識符(不能是關(guān)鍵字)
- 1.遵守PEP8命名規(guī)范(所有字母都小寫,多個單詞組成,單詞之間用下劃線隔開)
- 2.見名知意 看到名字就知道意思
- 3.變量名 = 值。= :賦值符號。將右邊的值賦給左邊的變量。
值:可以使任何有結(jié)果的表達式。
例:190 變量,10+20,調(diào)用函數(shù)表達式。 - 4.使用變量的時候,就是使用變量中保存的值;
- 5.變量先聲明(賦值),再使用
2.聲明變量的方式
- 1.直接賦值
age = 18
name = 'lorry'
print(age)
- 2.同時聲明多個變量,并且賦一樣的值
a1 = a2 =a3= a4 =a5 =10
print(a1,a2,a3,a4,a5,sep=' $ ')
- 3.同時聲明多個變量,賦不同的值,變量的個數(shù)和值得個數(shù)要保持一致
aa,bb = 10,20
print(aa,bb)
[x,y] = ["lorry","lorrybz"]
print(x,y)
- 4.給同一個變量,后賦的值會覆蓋原先的值,同一個變量可以存儲不同類型的值
num1 = 1
num1 = 2
print(num1)
num1 = "lorry"
print(num1)
num1 = [1,2,3,"lorry"]
print(num1)
aaa = [1,2,3,"lorry"]
aaa[0]="lorrbz"
print(aaa)
3.聲明變量的本質(zhì)
- 1.結(jié)論:python所有的變量存的都是數(shù)據(jù)在內(nèi)存中的地址。內(nèi)存地址大小一樣。用一個變量給另外一個變量賦值,實質(zhì)是將變量中的地址賦給另外一個變量。使用變量的時候,是使用變量中地址對應(yīng)的值。
- 2.3.變量的三要素:值、地址和類型
值:變量中存的地址對應(yīng)的值
地址:變量中存儲的地址
類型:變量中存的地址對應(yīng)的值的類型
name1 = "小明"
name2 = name1
print(name1) #使用變量拿到變量中地址對應(yīng)的值
print(id(name1)) # id(變量) 獲取變量中存儲的地址
print(id(name2))
print(type(name1),type(name2 ))
2.運算符
python 中的運算符:數(shù)學(xué)運算符、比較運算符、邏輯運算符、賦值運算符
1.數(shù)學(xué)運算符
- 1.基本操作:+:加法運算 -:減法運算 *:乘法運算 /:÷法運算(基操)
- 2.稍微高點的基操:
- %:取余(求余數(shù))
獲取一整數(shù)的最低一位或者幾位的值
- %:取余(求余數(shù))
print(10%3)
a = 35648
print(a % 10,a % 100)
- //:整除
- 判斷一個數(shù)是否能被另外一個數(shù)整除;2. 整除 取商的部分.
print(10 // 3,10 % 3)
print(3.9 // 3,3.9 % 3)
num1 = 289
print(num1 // 100)
- **:冪運算 x的y次方
print(2**10) #2的10次方
print(9**0.5) #9開平方
print(int(8**(1/3))) #8開3次方 取整
2.比較運算符 : >, <, ==,!=,>=,<=
注意:比較運算符的運算結(jié)果都是布爾值
print(100 >10,10>100,10 > 10 )
print(11 == 10,11 !=10,"lorry" == "lorry")
3.邏輯運算符:and or not
邏輯運算符的運算對象是布爾值,運算符結(jié)果也是布爾值
- and(邏輯與運算)
布爾1 and 布爾2 ;值1 and 值2
如果值1和值2的結(jié)果都為true,結(jié)果才是true。只要有一個false,結(jié)果為fals
- and(邏輯與運算)
| and | 值1(true) | 值2(false) |
|---|---|---|
| 值1(false) | false | false |
| 值2(true) | true | false |
注意:邏輯與運算相當于生活中的“并且”;當需要多個條件同事滿足就使用 and 鏈接在一起
例子:例子:要求成績 > 90分,并且表現(xiàn)分>95.
name = input("名字:")
grade = int(input("表現(xiàn)分數(shù):")) #成績
score = int(input("成績分數(shù):")) #分數(shù)
print('%s 是否獲得獎學(xué)金:'%name,grade >90 and score >90)
- or(邏輯或運算)
值1 or 值2 如果值1和值2中有一個true,就是true,兩個false才為false
- or(邏輯或運算)
| or | 值1(true) | 值2(false) |
|---|---|---|
| 值1(false) | true | false |
| 值2(true) | true | true |
邏輯 或 運算 相當于生活中的“或者”,當需要多個條件中至少有一個條件滿足,就使用 or 連接在一起
例:要求成績 > 90分或者表現(xiàn)分>95.
name = input("名字:")
grade = int(input("表現(xiàn)分數(shù):")) #成績
score = int(input("成績分數(shù):")) #分數(shù)
print('%s 是否獲得獎學(xué)金,表現(xiàn)分數(shù)%s,成績分數(shù)%s'%(name,grade,score),grade,grade >90 or score >90)
- not (邏輯 非 運算) 用來對某個條件否定。
not值 :如果值是true,結(jié)果是false;如果值是false,結(jié)果是true
例:是否能進入網(wǎng)吧的條件:年齡不小于18
- not (邏輯 非 運算) 用來對某個條件否定。
age = 21
print("是否能進入網(wǎng)吧",not age < 18)
print("是否能進入網(wǎng)吧:",age >= 18)
4.賦值運算符
=; +=; -=; *=; /= ;%=
所有賦值運算符的左邊必須是變量;組合的賦值運算符左邊的變量必須已經(jīng)賦值
所有的賦值運算符最終都會進行賦值操作。
- 1.# 1.= 直接賦值
num = 1
- += -= *= /= %=
變量 += 值 相當于:變量 = 變量 + 值()
變量 -= 值 相當于:變量 = 變量 - 值()
變量 *= 值 相當于:變量 = 變量 * 值()
變量 /= 值 相當于:變量 = 變量 / 值()
- += -= *= /= %=
a = 1
a +=1 # a = 1+1
print(a)
a *=2 # a= 2*2
print(a)
a /= 2 # a =4/2
print(a)
a %= 2 # a = 2%2
print(a)
- 運算符的優(yōu)先級
**數(shù)學(xué)運算符 > 比較運算符 > 邏輯運算符 > 賦值運算符 **
優(yōu)先級高的先算。如果有括號先算括號里面的。
- 運算符的優(yōu)先級
數(shù)學(xué)運算符中:** > *,/,%,// > +,-
num = 10 +20 > 25 and True < 2
# num = 30 > 25 and True < 2
# num = True and True
# num = True
print(num)
num = 10 +(20 > 25 and True < 2)
print(num)
# num = 10 +(False and True) and 前面如果False不會管后面,直接False
# num = 10
num = 10+2*3**2
print(num)
5.位運算符
位運算是正對二進制中每一位進行的相關(guān)操作
位運算(bit) &(與) |(或) ^(異或) ~(取反) >>(左移) <<(右移)
- a.(數(shù)字1) & (數(shù)字2) ->二進制的每一位進行" 與" 運算,運算時:如果都為1,結(jié)果為1,否則為0.
1 & 1 為1
0 & 1 為0
1 & 0 為0
0 & 0 為0
特點:一位上的數(shù)如果和1與,就會保留這一位上的數(shù),如果和0與,就會是0.
應(yīng)用:判斷一個數(shù)的奇偶性(最優(yōu)解答)
將數(shù)字和1 與,如果結(jié)果是0,數(shù)字是偶數(shù),如果結(jié)果是1,數(shù)字是奇數(shù)。
a = int(input("輸入任意數(shù):"))
b = 1
c = a & b
print(c)
if c == 1:
print("%s"%a+"是"+"奇數(shù)")
elif c == 0:
print("%s" % a + "是" + "偶數(shù)")
舉例 11010
舉例 00111
結(jié)果 00010
3(原) = 0011
2(原) = 0010
3 & 2 = 0 0 1 0(補碼)
3 & -2
3(原/補) = 0011
2(原) = 0010
-2(原碼) 1010 = 1101(反) = 1110(補碼)
0010(補碼,依然是正數(shù))
print(3 & 2)
print(3 & -2)
print(5 & 1,100 & 1)
- b. 數(shù)字1 | 數(shù)字2 如果有一位是1結(jié)果是1,兩個都為0結(jié)果才是0.
1 | 1 - 1
1 | 0 - 1
0 | 1 - 1
0 | 0 - 0
1101 | 1010 結(jié)果 1111
3 | 20
3(原) = 000011
20(原) = 010100
000011 | 010100 = 0100111
-3 | 20
-3(原碼) = 100011(原碼) = 111100(反碼) = 111101(補碼)
20(原碼/補碼) = 010100
-3 | 20 111101(補碼)
補碼轉(zhuǎn)反碼 -1 111100(反碼)
100011(原碼)= -3
print(-3|20)
- c.按位取反
~ 數(shù)字 將每一位取反(0變成1,1變成0)
print(~2)
# 010 > 101(補碼) = 100(反碼) = 111 = -3
- d.按位異或
(數(shù)字1) ^ (數(shù)字2) -判斷每一位相同為0,不同為1
可判斷 數(shù)字是否相同。
11 - 01011
2 - 00010
11^2 01001(補碼)
print(11^2)
- e.左移<<
(數(shù)字1 )<< n (位數(shù)) - 將指定的數(shù)字的每一位向左移指定的位數(shù),就是在二進制的后面加指定的0.
左移1位 乘以2,左移2位 乘以4 相當于x * (2**n)
10 << 1 左移過程
00001010(補碼) - 00010100(補碼)
-10 <<1
11010 -> 10101(反碼)=10110(補碼) << 1 = 101100(補碼) = 101011(反碼) = 110100 = -20
代碼:
print(10 <<1,10 <<2,10<<3,10<<4)
- f.右移 >> ;(數(shù)字1 )>>n(位數(shù)) 將數(shù)字的二進制位向右移動指定的位數(shù)(將低位刪除指定的位數(shù)).
相當于:** 數(shù)字1 //(2n)
20 右移過程
10100 >> 2 = 0101 =5
0101 >> 1 = 010 = 2
010 >> 1 = 01= 1
01 >> 1 = 0 = 0
3.字符串
1.什么是字符串
是python中常用的有序的但不可變的容器類的數(shù)據(jù)類型,可以同時存儲多個字符。屬于序列
字面量:使用單引號或者雙引號將任意字符引起來。
a = ('allal我是你爸爸,the top is your dad?')
b = len(a)
print("這句話:"+a+"有%s"%b+'個字符')
2.字符串的內(nèi)容
a.普通字符:包含數(shù)字字符、字母、普通符號:+ - * /
"1 2 3","sdsds","&&%90"
b.轉(zhuǎn)義字符:通過 \ 將一些字符轉(zhuǎn)換成有特殊功能或者特殊意義的字符
例如:
\t(制表符),
\n(換行)
print("ads\nsda5")
print("\tads\nsda5")
print("adssda5",end="\t")
print("lorry",end="\t")
print("2222222")
' 一個單引號
" 一個雙引號
\\ 單純的 \ 不會換行
print('ads\'sda5',"ads'sda5") #加\用來區(qū)分字符
print("ads\\nsda5")
注意:一個轉(zhuǎn)義字符代表一個字符
c.阻止轉(zhuǎn)義:在字符串前面加R/r,可以阻止轉(zhuǎn)義字符轉(zhuǎn)義
print(r"ads\nsda5")
print(r'\b') #退格,檢測邊界