回顧昨天知識
-
表達式
-
字符串
'hello'
-
數(shù)字
100
-
運算符
算術運算符
+ - * / // % **
-
比較運算符
< <= > >= == !=
-
布爾運算
and or not
-
條件表達式
左表達式 if 條件表達式 else 右表達式
-
函數(shù)
print(...) input(...) int(...) float(...) str(...) bool(...)
-
-
語句
-
賦值語句
a = 100
-
表達式語句
表達式單獨放在一行形成的語句叫做表達式語句
print(a)
-
del 語句
del a
-
pass 語句
if True: pass
-
if 語句(復合語句)
if 條件表達式1: 語句塊1 elif 條件表達式2: 語句塊2 elif 條件表達式3: 語句塊3 elif 條件表達式n: 語句塊n else: 語句塊other
-
-
運算符的優(yōu)先級
1 + 3 * 3 ** 2 + 4 // 2 1 + 3 * 9 + 4 // 2 1 + 27 + 4 // 2 1 + 27 + 2 28 + 2 30
運算符優(yōu)先級表
運算符 | 描述 |
---|---|
(expressions...) ,[expressions...] , {key: value...} , {expressions...}
|
綁定或加圓括號的表達式,列表顯示旷偿,字典顯示烹俗,集合顯示 |
x[index] , x[index:index] , x(arguments...) , x.attribute
|
抽取,切片萍程,調用幢妄,屬性引用 |
await x
|
await 表達式 |
** |
乘方 5 |
+x , -x , ~x
|
正,負茫负,按位非 NOT |
* , @ , / , // , %
|
乘蕉鸳,矩陣乘,除忍法,整除潮尝,取余 6 |
+ , -
|
加和減 |
<< , >>
|
移位 |
& |
按位與 AND |
^ |
按位異或 XOR |
` | ` |
in , not in , is , is not , < , <= , > , >= , != , ==
|
比較運算,包括成員檢測和標識號檢測 |
not x
|
布爾邏輯非 NOT |
and |
布爾邏輯與 AND |
or |
布爾邏輯或 OR |
if -- else
|
條件表達式 |
lambda |
lambda 表達式 |
:= |
賦值表達式 |
字符串
-
字面值(前期知識回顧)
'hello' "hello" '''hello''' """hello"""
-
字符串轉義
\' 代表一個單個的 ' \n 換行
-
字符串的運算
- 用于拼接字符串
- 用于生成重復的字符串
-
原始字符串(raw 字符串)
以字符r開頭的字符串, 其中的 \ 不算轉義字符串
字面值格式
r'字符串內容' r"字符串內容" r'''字符串內容''' r"""字符串內容"""
-
in / not in 運算符
-
作用
in 用于序列饿序,字符串勉失,字典中,用于判斷某個值是否存在于容器中,如果存在就返回True, 否則返回False
not in 的返回值與 in 相反
-
示例
>>> s = 'welcome to beijing!' >>> 'to' in s True >>> 'weimingze' in s False >>> 'beijing' not in s False >>> 'weimz' not in s True
-
-
字符串的索引 index
-
語法
字符串[整數(shù)表達式]
-
作用
用來獲取字符串其中的一個字符
-
說明
正向索引: 字符串的 正向索引是從0開始的原探,.... 最后一個索引為 len(s)-1
反向索引: 字符串的反向索引是從 -1 開始的乱凿,-1 代表最后一個,... -len(s) 代表第一個
-
示例
>>> s = 'ABCDE' >>> s[1] B >>> s[1+2] D >>> s[-1] E
注: len(x) 函數(shù)可以求取一個字符串的長度
-
-
練習
寫程序踢匣,輸入一個字符告匠, 打印字符串的如下內容
1. 打印這個字符串的第一個字符
2. 打印這個字符串的最后一個字符串
3. 如果這個字符串的長度是 奇數(shù),則打印中間這個字符
用 len(x) 求字符串的長度 -
字符串的切片 slice
-
作用
從字符串序列中取出相應位置的元素离唬,重新組成一個新的字符串
-
語法
字符串[(開始索引b):(結束索引e)(:(步長s))]
注: () 括起來的內容代表可以省略
-
說明
開始索引b是切片切下的開始位置
結束索引e 是切片的終止位置(但不包含終止點)
-
步長是切片取出數(shù)據(jù)后向后移動的方向和偏移量
- 沒有步長后专,相當于步長為1(默認為1)
- 當步長為正數(shù)時,取正向切片
- 開始索引默認為0, 結束索引是最后一個元素的下一個索引
- 當步長為負數(shù)時输莺,取反向切片
- 開始索引默認為-1, 結束索引是第一個元素的前一個索引
-
示例
# 01234 >>> s = 'ABCDE' >>> s[1:] # 'BCDE' >>> s[-2:] # 'DE' >>> s[1:4] # 'BCD' >>> s[:] # 'ABCDE' >>> s[:2] # 'AB' >>> s[1:1] # '' >>> s[4:2] # '' >>> s[::] # 等同于 s[::1] 'ABCDE' >>> s[::2] # 'ACE' >>> s[2::2] # 'CE' >>> s[-1::-2] # 'ECA' >>> s[::-1] # 'EDCBA'
-
-
練習1
寫一個程序戚哎,輸入一個字符串,把字符串的第一個字符和最后一個字符去掉嫂用,打印處理后的字符串
-
練習2
輸入一個字符串, 判斷這個字符串是否是回文
上海自來水來自海上
ABCCBA
13531
字符串的格式化表達式
-
作用
生成具有一定格式的字符串
-
語法規(guī)則
格式化字符串 % 參數(shù)1
# 或者
格式化字符串 % (參數(shù)1型凳, 參數(shù)2, 參數(shù)3) 占位符和類型碼
占位符和類型碼 | 說明 |
---|---|
%s | 轉成字符串, 使用 str(x) 函數(shù)轉換(常用) |
%d | 轉成 十進制的整數(shù)(常用) |
%o | 轉成 八進制的整數(shù) |
%x,%X | 轉成 十六進制的整數(shù) |
%e,%E | 轉成 指數(shù)格式的浮點數(shù) |
%f,%F | 轉成小數(shù)格式的浮點數(shù)(常用) |
%g,%G | 轉成指數(shù)格式或小數(shù)格式的浮點數(shù) |
%% | 轉成一個% |
-
示例1
>>> fmt = """ 甲方:_____%s_____ 乙方:_____%s_____ ....... 金額:_%d__ """ >>> s = fmt % ("魏眀擇", '達內', 10000) >>> print(s) 甲方:_____魏眀擇_____ 乙方:_____達內_____ ....... 金額:_10000__
-
示例2
>>> "+++%d+++" % 999 # 返回 '+++999+++' '+++999+++' >>> "+++%s+++" % 3.14 '+++3.14+++' >>> "+++%s+++" % "weimz" '+++weimz+++' >>> "+++%d+++" % 3.1415 '+++3+++' >>> "+++%d+++" % 13 '+++13+++' >>> "+++%o+++" % 13 '+++15+++' >>> "+++%x+++" % 13 '+++d+++' >>> "+++%e+++" % 3.1415 '+++3.141500e+00+++' >>> "+++%f+++" % 3.1415 '+++3.141500+++' >>> "+++%g+++" % 3.1415 '+++3.1415+++' >>> "+++%g+++" % 3141523274812374281342374324.23748123742183472 '+++3.14152e+27+++'
-
占位符和類型碼之間的格式化語法
% [- + 0 寬度.精度] 類型碼
-左對齊
+ 顯示正號
0 左側空白位置補零
寬度: 整個數(shù)據(jù)輸出的寬度
精度: 保留小數(shù)點以后多少位(默認小數(shù)點以后保留6位)
常用于 %d 和 %f 中-
示例
>>> "--%d--" % 99 '--99--' >>> "--%5d--" % 99 '-- 99--' >>> "--%05d--" % 99 '--00099--' >>> "--%5d--" % 99 '-- 99--' >>> "--%+5d--" % 99 '-- +99--' >>> "--%-5d--" % 99 '--99 --' >>> "--%f--" % 3.1415926 '--3.141593--' >>> "--%.2f--" % 3.1415926 '--3.14--' >>> "--%7.2f--" % 3.1415926 '-- 3.14--'
-
練習
寫一個程序:
輸入一個字符串
輸入一個浮點數(shù)
輸入一個整數(shù)
輸出: 全為10個字節(jié)寬度的字符串如下:
如:
請輸入字符串: weimz
請輸入浮點數(shù): 3.14
請輸入整數(shù): 99
打印如下:
+------------+
| weimz |
| 3.14 |
| 0000000099 |
+------------+
答案見: 05_exercise_format.py
字符串的常用方法 (method)
-
方法的調用語法
對象.方法名(參數(shù))
-
示例:
>>> "abc".isalpha() True >>> "123".isalpha() False >>> "123".isdigit() True
. 是"的"的意思
- 字符串的常用方法
方法名(S代表字符串對象) 說明 S.isalpha() 判斷字符串是否是英文字符 S.isdigit() 判斷字符串是否是全為數(shù)字 S.isupper() 判斷字符串是否是全為大寫的英文字符 S.islower() 判斷字符串是否是全為小寫的英文字符 S.center(width[, fill]) 將字符串按width 寬度居中,左右默認填充空格 S.count(sub[, start[, end]]) 獲取字符串中的子串的個數(shù) S.startswith(prefix) 返回S是否以prefix 開頭 S.endswith(suffic) 返回S是否以suffic結尾 str.replace(old, new[, count]) 替換字符串 str.find(sub[, start[, end]]) 查找字符串,返回第一次出現(xiàn)的索引嘱函,如果沒找到甘畅,返回-1 str.index(sub[, start[, end]]) 查找字符串,返回第一次出現(xiàn)的索引,如果沒找到則報錯(從左向右開始找) str.rindex(sub[, start[, end]]) 查找字符串,返回第一次出現(xiàn)的索引,如果沒找到則報錯(從右向左開始找) [] 代表其中的內容弄可以省略
詳見: https://docs.python.org/zh-cn/3/library/stdtypes.html#string-methods
-
示例:
>>> s = "ABC" >>> s.center(10) ' ABC ' >>> s.center(10, '#') '###ABC####' >>> s = 'hello world, hello china' >>> s.count('hello') 2 >>> s.count('hello', 10) 1 >>> s.count('hello', 10, 12) 0 >>> s = "/root/music/冰雨.mp3" >>> s.startswith('/root/') True >>> s.endswith('.mp3') True >>> s.endswith('music') False >>> s = 'welcome to Beijing' >>> s.upper() 'WELCOME TO BEIJING' >>> s.lower() 'welcome to beijing' >>> s.title() 'Welcome To Beijing' >>> s = '/root/music/冰雨.mp3' >>> pos = s.rindex('/') >>> pos 11 >>> pathname= s[:pos] >>> filename = s[pos+1:] >>> print(pathname) /root/music
-
練習
寫一個程序,輸入一個路徑
1) 打印出這個路徑是否是在 /root 文件夾下
2) 判斷您的文件是否是 .sh 文件
3) 如果是.sh 文件,如 xxx.sh, 則打印文件名 xxx
如:
請輸入: /root/bin/abcd.sh
1. 在 /root 下
2. 是.sh 文件
3. 文件名是: xxx請輸入: /etc/ABCD.SH
1. 不在 /root 下
2. 是 .sh 文件
3. 文件名是: ABCD
-
-
語句回顧
- 表達式語句
- 賦值語句
name = input("xxxx: ")
- pass 語句
- if 語句
-
循環(huán)語句
-
種類
- while 語句
- for 語句
-
問題:
# 打印 10 行 hello world print("hello world!")
-
while 語句
-
作用
根據(jù)一定的條件疏唾,重復的執(zhí)行某個語句塊
語法
while 真值表達式:
語句塊1 (*此部分可能會重復執(zhí)行)
else:
語句塊2
-
說明
- else 子句可以省略
- else 子句 當且僅當 真值表達式為假Flase的時候 會執(zhí)行 else 里的語句塊2
- 如果 此 while 是因為 調用 break 語句而終止循環(huán)蓄氧。則 else 子句里的語句不會執(zhí)行
-
示例1
while 1 < 2:
print("hello world") -
示例2
# 打印 5 行 "hello world" i = 0 while i < 5: print("hello world") i = i + 1 # 也可寫成 i += 1 else: print("while 語句已經(jīng)結束!")
-
練習1
寫一個程序,輸入一個整數(shù),寫程序打印如下 n 行文字
如:
請輸入: 10
這是第 1 行
這是第 2 行
這是第 3 行
...
這是第 10 行 -
練習2
寫一個程序 打印1~20 的整數(shù), 打印在 1 行內 每個數(shù)字之間用一個空格分隔開
1 2 3 4 5 ... 19 20
提示: print(x, end=' ')
語句嵌套
while 語句也是語句, 和其他的語句一樣槐脏,可以嵌套到其他的任何復合語句中喉童。
-
while 語句嵌套示意:
while 真值表達式:
...
while 真值表達式2:
...
else:
...
......
else:
... -
練習:
寫一個程序 打印1~20 的整數(shù), 打印在 1 行內 每個數(shù)字之間用一個空格分隔開
1 2 3 4 5 ... 19 20以上輸入打印 10 行
break 語句
-
作用
用于循環(huán)語句(while, for語句)中, 當break 執(zhí)行是,她會終止包含他的當前循環(huán)
-
說明
- break 語句只能用在 while 語句或for語句的內部.
- break 語句通常和 if 語句組合使用.
- 當break 語句執(zhí)行后顿天,此循環(huán)語句break 之后的所有語句都不會執(zhí)行(else 子句里的語句也不執(zhí)行)
- break 語句只能終止包含他的當前循環(huán)堂氯,當有循環(huán)嵌套時,只能跳出離他最近的一個循環(huán)
-
示例
i = 1 while i <= 5: print('i=', i) i += 1 else: print('循環(huán)結束: i=', i)
-
死循環(huán)
- 死循環(huán)是指循環(huán)條件一直成立的循環(huán)
- 死循環(huán)通常使用 break 語句來終止循環(huán)
- 死循環(huán)的 else 子句中的語句永遠不會執(zhí)行
-
寫法
while True:
語句塊死循環(huán)通常用于循環(huán)次數(shù)無法確定的循環(huán)
-
練習1
寫程序牌废,輸入一個整數(shù)n , 代表結束的整數(shù)咽白, 計算
1 + 2 + 3 + 4 + ..... + n 的和
請輸入: 100
5050
# 提示:
he = 0 # 用一個變量來記錄這個和 課后練習1:
寫程序, 任意輸入一些正整數(shù), 當輸入負數(shù)時結束輸入畔规,當輸入完成后局扶,打印您輸入的這些數(shù)的和
如:
請輸入: 1
請輸入: 2
請輸入: 3
請輸入: 4
請輸入: -1
您剛才輸入的正整數(shù)之和是: 10
- 課后練習2
打印 1~ 20 的整數(shù), 每行打印 5 個恨统, 打印 四行, 如:
1 2 3 4 5
6 7 8 9 10
...
16 17 18 19 20
# 提示: print() 換行
- 課后練習3
已知, 局域網(wǎng)的IP 都是: 192.168.0.xxx
寫程序叁扫,生成 從 192.168.0.1 ~ 192.168.0.254 區(qū)間的 254 個 IP 地址
-
課后練習4
已知, 局域網(wǎng)的IP 都是: 192.168.xxx.yyy
xxx 從 0 ~ 10, yyy 從 1 ~ 254
寫程序,生成 從 192.168.0.1 ~ 192.168.10.254 區(qū)間的 2540 個 IP 地址
# 提示用循環(huán)嵌套答案
# 已知, 局域網(wǎng)的IP 都是: 192.168.xxx.yyy # xxx 從 0 ~ 10, yyy 從 1 ~ 254 # 寫程序畜埋,生成 從 192.168.0.1 ~ 192.168.10.254 區(qū)間的 2540 個 IP 地址 # # 提示用循環(huán)嵌套 xxx = 0 while xxx <= 10: # 此處 xxx =0, 生成 1~254 的數(shù)莫绣,交給 yyy yyy = 1 while yyy <= 254: # 生成 IP 地址 ip = '192.168.%d.%d' % (xxx, yyy) print(ip) yyy += 1 xxx += 1
課后練習5
寫一個程序,輸入三行文字悠鞍, 按最長的一行对室, 打印如下圖形方框
請輸入: hello
請輸入: welcome to beijing
請輸入: aaaaaaa
打印:
+--------------------+
| hello |
| welcome to beijing |
| aaaaaaa |
+--------------------+
提示: str.center(width)
答案
# 寫一個程序,輸入三行文字咖祭, 按最長的一行掩宜, 打印如下圖形方框
# 請輸入: hello
# 請輸入: welcome to beijing
# 請輸入: aaaaaaa
# 打印:
# +--------------------+
# | hello |
# | welcome to beijing |
# | aaaaaaa |
# +--------------------+
# 提示: str.center(width)
s1 = input("請輸入:") # ctrl + d 可以復制當前行
s2 = input("請輸入:")
s3 = input("請輸入:")
len1 = len(s1) # 求取字符串的長度
len2 = len(s2)
len3 = len(s3)
# 從上面三個數(shù)中,找出最大的一個么翰, 用 mymax 變量綁定
# 方法2牺汤, 通用的算法
mymax = len1
if len2 > mymax:
mymax = len2
if len3 > mymax:
mymax = len3
# 方法1
# if len1 > len2:
# # 讓 len1 和 len3 再比較
# if len1 > len3:
# mymax = len1
# else:
# mymax = len3
# else:
# # 讓 len2 和 len3 再比較
# if len2 > len3:
# mymax = len2
# else:
# mymax = len3
print('最大長度是:', mymax)
# 計算第一行
line1 = '+' + '-' * (mymax +2) + '+'
print(line1)
# 文字的第一行
# 方法1 , 用 str.center 居中文字的第一行
# center_s1 = '| ' + s1.center(mymax) + ' |'
# 方法2 浩嫌, 用 自己的方法 居中文字的第一行
left_blanks = (mymax - len1) // 2 # 計算左側的空格數(shù)
right_blanks = mymax - len1 - left_blanks # 計算右側的空格數(shù)
center_s1 = '| ' + ' ' * left_blanks + s1 + ' ' * right_blanks + ' |'
print(center_s1)
# 文字的第二行
center_s2= '| ' + s2.center(mymax) + ' |'
print(center_s2)
# 文字的第三行
center_s3 = '| ' + s3.center(mymax) + ' |'
print(center_s3)
# 打印最后一行
print(line1)