字符串 str
作用:
用來記錄文本(文字)信息
字符串的表示方式:
在非注釋中,凡是用引號括起來的部分都是字符串
' 單引號
" 雙引號
''' 三單引號 """ 三雙引號
空字符串的字面值表示方式:
'' "" '''''' """"""
# 注: 空字符串的布爾值bool(x) 為False
非空字符串的字面值表示方式
'hello' "hello" '''hello''' """hello"""
單引號和雙引號的區別
單引號內的雙引號不算結束符
雙引號內的但引號不算結束符
# 示例: print("I'm a chinese") print('I am like "python"')
三引號字符串
作用:
三引號字符串中的換行會自動轉換為換行符'\n'
三引號字符串內可以包含單引號和雙引號
# 示例: print('welcome to beijing!\nI like Python!\nI am studing')
隱式字符串的字面值拼接
# 示例: s = "I'm a teacher" 'I am studing "python"' print(s) # I'm a teacher Iam studing "Python"
用轉義序列代表特殊字符
字符串字面值中用字符反斜杠(\)后跟一個或一些字符代表特殊的一個字符
轉義格式 說明
\' 單引號(') \" 雙引號 \\ 一個反斜杠 \n 換行 \r 返回光標至行首 \t 水平制表符 \v 垂直制表符 \b 倒退 (backspace) \f 換頁 \a 響鈴 \0 字符串,字符值為零 \0oo oo為兩位八進制表示的字符 \xXX XX為兩位十六進制表示字符 \uXXXX UNICODE16的十六進制表示的字符 \UXXXXXXXX UNICODE32的十六進制表示的字符
# 示例: print("\'\"\\") print("ABC\n123") # "\n" 作用是讓光標移到下一行行首 print("ABCD\r12") print("123\tABC") print("ABCD\b\b1") # AB1D
ASCII 編碼表:
$ man ascii <回車>
常用的ASCII編碼值:
# 字符 十進制 十六進制 "0" 48 0x30 "A" 65 0x41 "a" 97 0x61
求序列長度的函數len(x)
len(x) 返回字符串中字符的個數
練習:
# 看下列字符串有幾個字符 '1234abcd' #8 '5\'4"' #4 '\"A\x34\056' #4 '\a\bc\td\n' #6
raw 字符串 (原始字符串)
格式:
r '字符串內容' r "字符串內容" r '''字符串內容''' r """字符串內容"""
作用:
讓轉義符號\無效
# 示例: a = 'C:\newfile\test.py' print(a) b = r'C:\newfile\test.py' print(b)
字符串的運算
+ 加號用於拼接字符串
x = "ABCD" + "1234" print(x) # ABCD1234 y = x + r'abcd' print(y) #ABCD123abcd
+= 運算符用於原字符串與右側字符串拼接,變量綁定新生成的字符串
x = "ABCD" x += "1234" print(x) #ABCD1234
* 運算符用於生成重復的字符串
x = "ABCD" * 3 print(x) # ABCDABCDABCD # 注: 字符串只能和整數相乘
*= 用於生成重復的字符串,變量綁定新生成的字符串
x = "123" x *= 4 print(x) #123123123123
練習:
寫一個程序,打印一個高度為4行的矩形方框
要求輸入一個整數,此整數代碼矩形的寬度,打印
相應寬度的矩形
如:
請輸入矩形寬度
打印如下:
#########
# #
#########
s = int(input("請輸入一個整數:")) line1 = "#" * s print(line1) line2 = "#" + " " * (s-2) + "#" print(line2) print(line2) print(line1)
字符串的比較
運算符:
< <= > >= == !=
規則:
依次按編碼值進行兩兩字符比較,一旦不同,則比較結束,返回比較
結果.當編碼值與長度完全相同時,兩個字符串相同
# 示例: "A" < "B" # True "a" < "B" # False "ABC" > "ABB" # True "ADC" >= "ACD" # True "AB" < "ABC" # True "AD" > "ABC" # True "abc" != "ABC" # True
in 和 not in 運算符
作用:
in 用於序列,字典,集合中,用於判斷某個值是不存在於容器中,如果存在則返回True,否則返回False
not in 與 in 運算符返回結果相反
格式:
對象 in 序列
注:字符串是序列的一種
# 示例: x = "welcome to beijing" "to" in x # True "tarena" in x # False "hello" not in x # True "e t" not in x # False
練習:
寫程序,輸入一個長長的字符串,判斷你的姓名是否存在於用戶輸入的字符串中,如果存在則打印:"你的名字出現了"
否則不預理睬(忽略)
d = ("xiaobai") s = input("請輸入用戶名:") if d in s: print("你的名字出現了!") else: pass
字符串的索引和切片操作
索引 index
python 字符串是不可以改變的字符序列
語法:
字符串[整數表達式]
說明:
python序列都可以用索引(index)來訪問序列中的對象
python序列正向索引是從0開始的,第二個索引為1,最后一個為:len(s)-1
python序列的反向索引是從-1開始的,-2代表倒數第二個,以此類推,...第一個是 -len(s)
# 示例: s = "A B C D E" # [0] [1] [2] [3] [4] # [-5] [-4] [-3] [-2] [-1] s[1] #B s[-1] #E s[-4] #B s[-8] #越界錯誤 IndexError
練習:
輸入一個字符串,打印如下內容:
1.打印這個字符串的第一個字符
2.打印這個最非常的最后一個字符
3.如果這個字符串的長度是奇數,打印中間這個字符:
注:求字符串長度的函數是 len(x)
s = input("請輸入一個字符串:") print(s[0]) print(s[-1]) if len(s)%2==1: # 如果是奇數 print(s[len(s)//2])
切片 slice
作用:
從字符串序列中取出相應的元素,重新組成一個新的字符串序列
語法:
s[(開始索引b):(結束索引e)(:(步長))]
注:小括號()括起的部分代表可省略
說明:
開始索引是切片開始切下的位置,0代表第一個元素,代表第二個元素,-1 代表最后一個元素....
結束索引是切片的終止索引(但不包含終止點)
步長是切片每次獲取完當前元素后移動的方向和偏移量
沒有步長,相當於步長為1(默認為1)
當步長為整數是,取正向切片:
開始索引默認為0,結束索引為最后一個元素的下一個元
當步長為負整數時,取反向切片:
反向切片時,默認的起始位置為最后一個元素,終止位置,是第一個元素的前一個位置
注:含前不含后
# 示例: s = "A B C D E” " [0] [1] [2] [3] [4] [-5] [-4] [-3] [-2] [-1] x = s[1:4] # x---->"BCD" x = s[1:] # x---->"BCDE" x = s[:4] # x---->"ABCD" x = s[:] # x---->"ABCDE" x = s[1:1] # x---->"" 空字符串 x = s[4:2] # x---->"" 空字符串 x = s[1:4:1] # x---->"BCD" x = s[1:4:2] # x---->"BD" x = s[0::2] # x---->"ACE" x = s[3:0:-1] # x---->"DCB" x = s[::-1] # x---->"EDCBA" x = s[4:-100:-1] # x---->"EDCBA" x = s[4::-2] # x---->"EC" x = s[4:0-2] # x---->"EC"
練習:
1. 寫一個程序,輸入一個字符串,把字符串的第一個字符和最后一個字符去掉后,打印出處理后的字符串
s = input("請輸入一個字符串:") print(s[1:len(s)-1])
2. 輸入任意一個字符串,判斷這個字符串是否是回文
回文示例:
上海自來水來自海上
ABCCBA
13831
回文是指中心對稱的文字
任意輸入一段文字,判斷是否是回文
s = input("請輸入一個字符串:") s2 = s[::-1] #將原輸入的字符串反轉 if s == s2: print(s,"是回文") else: print(s,"不是回文")
python 運算符優先級
文檔參見:
python_base_docs_html/python運算符優先級.html
(需要者,發郵箱給我 cmaoxian@126.com)
python3中常用於序列的函數
len(x) 返回序列的長度
max(x) 返回序列的最大值的元素
min(x) 返回序列的最小值的元素
字符串編碼轉換函數:
ord(c) 返回一個字符c的unicode編碼值
chr(i) 返回i這個值所對應的字符
練習:
寫一個程序,輸入一段字符串,如果字符串不為空,則把字符串的第一個字符的編碼值打印出來
s = input("請輸入一個字符串:") if len(s) != 0: print("字符串不為空") print(s[0],"的編碼值是",ord(s[0]))
整數轉為字符串函數
bin(i) 將整數轉換為二進制的字符串
oct(i) 將整數轉換為八進制的字符串
hex(i) 將整數轉換為十六進制的字符串
字符串的構造函數:
str(obj="") 將對象轉換為字符串
python3 常用的字符串方法(method(.的))
語法:
對象.方法名(方法傳參)
# 示例: "abc".isalpha() # 語法是對的 123.isalpha() # 錯的,123是int類型,它沒有isalpha方法
文檔參見:
python_base_docs_html/str.html
(需要者,發郵箱給我 cmaoxian@126.com)
小結:
字符串 保存文字信息
# '' "" '''abc''' """ hello"""
運算:
# + += * *= # < <= > >= == != # in , not in
# 索引和切片 [整數表達式], [:],[::]
函數:
# len(x) max(x,大),min(x,小) # ord(單個字符),chr(整數) # bin(x),oct(x),hex(x),str(x)
方法:
# s.count(...) # s.strip() # ...#略
字符串的格式化表達式
語法格式:
格式化字符串 % 參數值
或
格式化字符串 % (參數值1,參數值2,...)
說明:
% 右側為參數值,當有多個參數值是用括號()括起來,各參數間用逗號(,)分隔
% 左側為格式化字符串,中間的 % 開頭的字符為占位符合類型碼
作用:
生成一定的格式的字符串
# 示例: fmt = "姓名: %s, 年齡:%d" name = "tarena" age = 15 s = fmt % (name,age) #s = “姓名: tarena,年齡:15” name = "小張" age = 20 s = fmt % (name,age) #s = “姓名:小張,年齡:20”
格式化字符串中的占位符和類型碼
占位符合類型碼 意義 %s # 字符串,使用str(x) 函數轉換 %r # 字符串,使用sepr(x) 函數轉換 %c # 整數轉為單個字符 %d # 整數轉為十進制整數 %o # 整數轉為八進制整數 %x # 整數轉為十六進制整數(字符a-f小寫) %X # 整數轉為十六進制整數(字符A-F小寫) %e # 指數型浮點數(e小寫),如2.9e+10 %E # 指數型浮點數(E小寫),如2.9E+10 %f,%F # 浮點十進制形式 %g,%g # 十進制形式浮點或指數浮點自動轉換 %% # 等同於一個%字符
占位符和類型碼之間的格式語法
% [- + 0 寬度.精度] 類型碼
注:[]里的內容可以省略不寫
- 左對齊(默認為右對齊)
+ 顯示正號
寬度 整個數據輸出的寬度
精度 保留小數點后多少位(默認為6位)
# 示例: "%d" %123 # "123" "%10d" %123 # "123" "%010d" %123 # "0000000123" "%-010d" %123 # "123 " "%+10d" %123 # " +123" "%10s" %"ABC" # " ABC" "%f" %3.1415926535897123 # "3.141593" "%.10f" %3.1415926535897123 # "3.1415926536" "%7.2f" %3.1415926535897123 # " 3.14" "%+7.2f" %3.1415926535897123 # " +3.14" "%-+7.2f" %3.1415926535897123 # "+3.14 "
練習:
寫一個程序,輸入三行文字,讓這三行文字依次以20個字符的寬度右對齊輸出
如:
請輸入第1行:hello china
請輸入第2行:tanena
請輸入第3行:a
打印如下:
hello china
tanena
a
做完上題后在思考:
能否以最長的字符串長度進行右對齊顯示(左側填充空格)
a = input("請輸入第一行文字:") b = input("請輸入第二行文字:") c = input("請輸入第三行文字:") # 求三個字符串的最大長度 max_len = len(a) #設為最大值 方法2 max_len= max(len(a),len(b),len(c)) if max_len < len(b): max_len = len(b) if max_len < len(c): max_len = len(c) # 左側手動添加空格 print(" " * (max_len-len(a))+a) print(" " * (max_len-len(b))+b) print(" " * (max_len-len(c))+c)
占位符合類型碼 意義 %s 字符串,使用str(x) 函數轉換 %r 字符串,使用sepr(x) 函數轉換 %c 整數轉為單個字符 %d 整數轉為十進制整數 %o 整數轉為八進制整數 %x 整數轉為十六進制整數(字符a-f小寫) %X 整數轉為十六進制整數(字符A-F小寫) %e 指數型浮點數(e小寫),如2.9e+10 %E 指數型浮點數(E小寫),如2.9E+10 %f,%F 浮點十進制形式 %g,%g 十進制形式浮點或指數浮點自動轉換 %% 等同於一個%字符