python學習2(轉載)
一、流程控制之while迴圈
語法:
while 條件:
迴圈體
else:
else語句(當條件不成立的時候執行這裡 和break沒關係)
判斷條件是否成立。 如果成立執行迴圈體。然後再次判斷條件,。。。。。直到條件不成立的時候跳出迴圈
break :終止當前本層迴圈(直接跳到迴圈的末尾)
while True:
content = input("請輸入你要噴的內容,輸入Q停止噴人:")
if content == 'Q':
# 退出迴圈
break # 徹底的打斷當前本層迴圈
else:
print("傳送給打野", content)
break示例
1 while True: 2 content = input("請輸入你要噴的內容,輸入Q停止噴人:") 3 if content == 'Q': 4 # 退出迴圈 5 break # 徹底的打斷當前本層迴圈 6 else: 7 print("傳送給打野", content)
continue:停止當前本次迴圈(跳到迴圈的開頭)
num = 1
while num <= 10:
if num == 8:
num = num + 1
continue # 在continue之前改變迴圈變數
print(num)
num = num + 1
1 num = 1 2 while num <= 10: 3 if num == 8: 4 num = num + 1 5 continue # 在continue之前改變迴圈變數 6 print(num) 7 num = num + 1
pass 不表示任何內容,只是為了程式碼完整性佔位而已
a = 1
while a < 11 :
if a == 8 :
pass
else:
print("你好")
a = a + 1
print(a)
1 a = 1 2 while a < 11 : 3 if a == 8 : 4 pass 5 else: 6 print("你好") 7 a = a + 1 8 print(a)
執行結果:
二、格式化輸出
格式化輸出用的是佔位符——用%表示
%s 表示字串佔位符
%d 表示數字佔位符
在用時只要在末尾加%加對應資料型別的變數即可
1 print("我叫%s,今年%d歲了,喜歡%s" % ("alex", 56, "銀王"))
1 print("我叫%s,今年%d歲了,喜歡%s" % ("alex", 56, "銀王"))
一句話中使用了格式化輸出. 那麼%就是佔位。如果你的百分號不是作為佔位。 要寫成%%
1 print("你的名字是%s,你已經完成了今天80%%的工作" % name)
1 print("你的名字是%s,你已經完成了今天80%%的工作" % name)
三、基本運算子
計算機可以進行的運算分為:算術運算、比較運算、邏輯運算、賦值運算、成員運算、身份運算、位運算(後三個後面學)
算術運算
算術運算子:
+ 加, - 減,* 乘, / 除, % 取模 返回除法的餘數,** 冪, // 取整除,返回商的部分
比較運算
比較運算子:
== 相於, != 不等於, <> 不等於, > 大於, < 小於, >= 大於等於, <= 小於等於
賦值運算
賦值運算子:
= 單個等號表示賦值,雙等號表示比較 a = 10表示把10 賦值給變數a
+= a = a+1 <=> a += 1
-= a = a-1 <=> a -= 1
*= a = a*c <=> a *= c
/= a = a/c <=> a /= c
%= a = a%c <=> a %= c
**= a = a**c <=> a **= c
//= a= a//c <=> a //= c
邏輯運算
邏輯運算子:
and 兩邊都為真才真(一假則假)
or 兩邊都為假才假(一真則真)
not 取反
注意: 1、 python中邏輯運算的本質是取運算子兩邊的一個值返回,而且存在短路邏輯,即false開頭的and都會被處理成false true開頭的or都會被處理成true
2、0相當於false,1相當於true
3、運算子優先順序順序 從高到低 () -> not -> and -> or
print(0 or 1) # 1
print(0 or 2) # 2
print(1 or 0) # 1
print(0 and 1) # 0
print(1 and 0) # 0
print(1 or 2 and 3) # 1
print(0 or 1 and 4 > 3 or 5 < 7 and 4) # 1
1 print(0 or 1) # 1 2 print(0 or 2) # 2 3 print(1 or 0) # 1 4 print(0 and 1) # 0 5 print(1 and 0) # 0 6 print(1 or 2 and 3) # 1 7 print(0 or 1 and 4 > 3 or 5 < 7 and 4) # 1
四、字串編碼
1. ASCII 8bit 1byte 記住:大寫字母A從65開始,小寫字母a從97開始,數字0從48開始
2. GBK 16bit 2byte
3. Unicode 32bit 4byte
4. UTF-8 可變長度的unicode
英文: 8bit 1byte
歐洲文字: 16bit 2byte
中文 : 24bit 3byte
補充:
in 和 not in
可以判斷xxx字串是否在xxxx字串中
1 content = input("輸入內容") 2 if "擦" in content or "滾" in content : 3 print("你輸入的文字含有不合法內容")
python基本資料型別回顧
1. int 整數
2. str 字串. 不會用字串儲存大量的資料
3. bool 布林值. True, False
4. list 列表(重點) 存放大量的資料
5. dict 字典 key: value 查詢會比較快
6. set 集合 無序 不能重複
7. bytes 一堆位元組。 我們程式處理的最小單位
8. tuple 元組 不可變的列表
一、int(整數)
對於一個數字除了運算幾乎沒有其他的操作,如果想找的話倒是有一個bit_lenght(),可以用來計算這個數的二進位制長度
二、bool 布林值
bool沒有什麼方法,這裡說一下資料型別轉換問題
x 轉成 y型別 => y(x)
比如:
x 轉成 int => int(x)
x 轉成 str => str(x)
x 轉成 bool => bool(x)
在bool轉成int時,int(Ture) 是1 int(False)是0
三、字串
字串由 ', ", ''', """組成
字元:你能看到的單一文字元號
字串:字元連成串,有固定順序的
注意: 字串是一個不可變的資料型別,不可變資料型別還有數字、元組
什麼是可變資料型別和不可變資料型別?
我們知道資料在建立的的時候都會申請一個記憶體空間用來儲存它,變數名只是指向這個記憶體空間。對於不可變資料型別來說,對變數的操作會改變它的記憶體空間(id),而對可變資料型別的操作則不會改變記憶體空間id
>>>a = 1
>>>id(a)
4297537952
>>> a = a + 1
>>> id(a)
4297537984
#列表
>>>line=[1,2,3,4]
>>>id(line)
4392665160
>>>line[1] = 5
>>>line
[5,2,3,4]
>>>id(line)
>>>4392665160
1 >>>a = 1 2 >>>id(a) 3 4297537952 4 >>> a = a + 1 5 >>> id(a) 6 4297537984 7 8 #列表 9 >>>line=[1,2,3,4] 10 >>>id(line) 11 4392665160 12 >>>line[1] = 5 13 >>>line 14 [5,2,3,4] 15 >>>id(line) 16 >>>4392665160
1.1 索引
索引就是字串中每個元素所對應的位置,索引從0開始
1 >>>str = hello 2 >>>str[o] = h 3 >>>str[1] = e 4 >>>str[-1] = o
1 >>>str = hello 2 >>>str[o] = h 3 >>>str[1] = e 4 >>>str[-1] = o
1.2 切片
切片語法:
str[start:end:step]
start是開始索引
end是結束索引,但結束索引對應元素取不到(顧頭不顧腚)
step 表示步長,即多少元素中取一個,如果是2的話就是兩個元素中取一個
步長是整數表示從左往右取,是負數表示從右往左取,預設是1
>>>str = "hello world"
>>>str[0:3]
hel
>>>str[0: ]
hello world
>>>str[-3:-1]
rld
>>>str[ : :-1]
dlrow olleh
1 >>>str = "hello world" 2 >>>str[0:3] 3 hel 4 >>>str[0: ] 5 hello world 6 >>>str[-3:-1] 7 rld 8 >>>str[ : :-1] 9 dlrow olleh
1.3 大小寫轉來轉去
s ="hello old boy"
s.capitalize() 將句子首字母轉成大寫
s.title() 將特殊符號隔開的單詞首字母都轉為大寫
s.upper() 全部轉為大寫
s.lower() 全部轉為小寫
s.casefold() 全部轉為小寫 和lower()的區別是 lower()對某些字母支援不夠好,而這個支援所有字母,比如東歐一些字母
s.swapcase() 大小寫互相轉換
1.4 切來切去
str = "old boy "
str.center(10 , *) 居中 把str擴充套件到長度為10,用*填充
str.strip() 去掉字串兩端的空白(包括空格,換行符,\t),
str.lstrip() 去掉左邊的空白
str.rstrip() 去掉右邊的空白
str.strip("s") 去掉兩邊的指定字元序列,只要是兩端有序列中的內容都會去掉
1 name = "aleX leNb" 2 print(name.strip("ab")) #移除開頭的a和結尾的b
1 name = "aleX leNb" 2 print(name.strip("ab")) #移除開頭的a和結尾的b
str.replace("old", "new") 字串替換 把old替換成new
str.split(" x ") 根據 x 對字串進行切割,得到的是一個列表,如果切割符在左右兩端. 那麼 一定會出現空字串。(深坑請留意)
如果split()沒給值,會根據空白切割得到一個列表,並將空字串從列表中刪除(在操作檔案時有時候會很方便)
1.5 格式化字串方式二
使用.format()方法
# 格式化輸出
s12 = "我叫%s, 今年%d歲了, 我喜歡%s" % ('sylar', 18, '周杰倫')
# 之前的寫法
print(s12)
s12 = "我叫{}, 今年{}歲了, 我喜歡{}".format("周杰倫", 28, "周潤發")
# 按位置格式化
print(s12)
s12 = "我叫{0}, 今年{2}歲了, 我喜歡{1}".format("周杰倫", "周潤發", 28)
# 指定位置
print(s12)
s12 = "我叫{name}, 今年{age}歲了, 我喜歡{singer}".format(name="周杰倫", singer="周潤
發", age=28)
# 指定關鍵字
print(s12)
1 # 格式化輸出 2 s12 = "我叫%s, 今年%d歲了, 我喜歡%s" % ('sylar', 18, '周杰倫') 3 # 之前的寫法 4 print(s12) 5 s12 = "我叫{}, 今年{}歲了, 我喜歡{}".format("周杰倫", 28, "周潤發") 6 # 按位置格式化 7 print(s12) 8 s12 = "我叫{0}, 今年{2}歲了, 我喜歡{1}".format("周杰倫", "周潤發", 28) 9 # 指定位置 10 print(s12) 11 s12 = "我叫{name}, 今年{age}歲了, 我喜歡{singer}".format(name="周杰倫", singer="周潤 12 發", age=28) 13 # 指定關鍵字 14 print(s12)
1.6 查詢
str = "我喜歡python"
str.startswith("x") 是否以 x 開頭
str.endswith("x") 是否以 x 結尾
str.count("x") x在str中出現的次數
str.find("x") 查詢str中是否存在 x ,有就返回索引值,沒有返回-1
str.find("x", a , b) 切片查詢
str.index("x") 查詢 x 的索引值,有就返回,沒有報錯
1.7 條件判斷
str.isalnum() 是否由字母和數字組成
str.isdigital() 是否由數字組成
str.isdecimal() 檢查字串是否只包含十進位制字元
str.isnumeric() 是否由數字組成,比較厲害,中文數字都能識別
str.isalphl() 是否由字母組成
1.8 計算字串長度
len() 函式
str = "我是不是你最愛的人"
print(len(str)) #輸出str長度
1.9 迭代
for 變數 in 可迭代物件:
迴圈體(break,continue)
else:
else語句
'''用for迴圈對s="321"進行迴圈,列印的內容依次是:"倒計時3秒","倒計時
2秒","倒計時1秒","出發!"。
'''
s = "321"
for c in s:
# print("倒計時%s秒" % c)
print("倒計時{}秒".format(c))
else:
print("出發")