day04-日常筆記

字符串操作

獲取字符

1.獲取單個字符

字符串中的每一個字符都會對應一個唯一的下標(索引)用來表示字符在字符串中的位置。
下標是從0開始一次增加的海铆, 0對應的是第一個字符(0 ~ 字符串長度-1)
可以是從-1開始依次減小,-1代表最后一個字符(-1 ~ -字符串長度)
例如:

```
'hello'   h->(0,-5)  e->(1,-4) l->(2,-3)  l->(3,-2) o->(4,-1)
'\tpytho\u4e00n'    p->(1, -7)
```
  • a.語法:字符串[下標]??-?? 獲取字符串中指定下標對應的字符
  • b.說明:字符串??-??只要結果是字符串的表達式都可以,例如:字符串字面量, 字符串變量
    []  - 固定寫法
    下標 - 需要獲取的字符對應的下標; 注意,這兒的下標不能越界
    
    示例:
    result = 'how are you!'[0]    # 獲取字符串'how are you!'中下標是0的字符平挑,并且賦給變量result
    print(result)
    
    print('how are you!'[-4])   # y
    # print('how are you!'[-13])   # IndexError: string index out of range
    
    str1 = 'good good study! day day up!'
    print(str1[10])
    

2.獲取部分字符(字符串切片)

方法一:

  • a.語法:字符串[開始下標:結束下標:步長] - 從開始下標開始游添,獲取到結束下標前為止系草。每次下標值加上步長去獲取下一個
  • b.說明:字符串 - 只要結果是字符串的表達式都可以,例如:字符串字面量, 字符串變量
    []  - 固定寫法
    開始下標通熄、結束下標 - 下標值(這兒的下標可以越界)
    步長 - 必須是整數(正數和負數都行); 如果步長是正數找都,是從開始下標開始從前往后獲却奖妗;
                                   如果步長是負數能耻,是從開始下標開始從后往前獲壬兔丁亡驰;
    
  • c.注意:當步長為正,要求開始下標對應的字符的位置必須在結束下標對應的字符的位置的前面,否則結果是空串饿幅!當步長為負凡辱,要求開始下標對應的字符的位置必須在結束下標對應的字符的位置的后面,否則結果是空串!

注意:不管怎么取栗恩,結束下標一定取不到透乾!

str1 = 'hello python!'
print('結果1:', str1[0:-1:2])   # 從前往后取
print('結果2:', str1[-1:0:-2])    # 從后往前取

print('結果3:', str1[-1:-100:-1])   # 結束下標越界
print('結果4:', str1[100: -100: -1])  # 下標越界

練習:獲取一個字符串中所有下標是奇數的字符(順序)

  • 方法一:
print(str1[1:100:2])

str2 = "{'name':'小明', 'age': 18}"
print(str2[1:-1:1])
  • 方法二:(省略步長)

    字符串[開始下標:結束下標]??-??步長是1;從開始下標開始到結束下標前為止磕秤,一個一個的热槲凇!

    print('when i was young!'[2:6])
    
  • 方法三:(省略開始下標和結束下標)

方法 說明
省略開始下標 字符串[:結束下標:步長] - 當步長是正數,從字符串的第一個字符開始取到結束下標前為止;
           當步長是負數,從字符串的最后一個字符開始取到結束下標前為止.
省略結束下標 字符串[開始下標::步長] - 當步長是正數,從開始下標開始取到字符串最后一個字符為止;
           當步長是負數市咆,從開始下標開始取到字符串的第一個字符為止.
str3 = 'when i was young!'
print(str3[:6], str3[:6:-1])
print(str3[2:], str3[2::-1])
print(str3[:])
print(str3[::-1])    # 讓字符串倒序
print(str3)

字符串相關運算

1.字符串支持的運算符: +, *, >, <, ==, != ,>=, <=

python中的字符串支持數學運算符中的+和*,以及所有的比較運算符

  • a. + : 字符串1 + 字符串2 - 將字符串1和字符串2拼接在一起產生一個新的字符串

    注意: 字符串和數字不能混合相加!

  • b. * : 字符串 * N - N是正整數; 字符串重復N次產生一個新的字符串

    示例:

    new_str = 'abc' + '123'
    print(new_str)
    
    name = '張三'
    message = '吃飯了嗎汉操?'
    print(name+message+'....')
    
    # print('abc'+123)   # TypeError: must be str, not int
    
    new_str = 'abc'*3
    print(new_str)
    
    print(('abc'+'123')*2)    # abc123abc123
    print('abc'+'123'*2)      # abc123123
    
  • c.比較是否相等

    ==, != 可以判斷兩個字符串是否相等或者不相等

    示例:

    print('abc' == 'abc')    # True
    print('abc' == 'cba')    # False
    print('abc' != 'abc')    # False
    
    
  • d.字符比較大小

    從第一個字符開始依次往后找,找到第一個不相等的字符對蒙兰,判斷它們的編碼值的大小磷瘤,誰的編碼值大,對應的字符串就大搜变;不會再往后比較了膀斋!

    應用:

    1. 判斷是否是小寫字母:'a'<=char<='z' <===> char>='a' and char<='z'
    2. 判斷是否是大寫字母:'A'<=char<='Z'
    3. 判斷是否是字母: 'a' <= char <= 'z' or 'A' <= char <= 'Z'

    示例:

    print('abdcb' > 'abczde')
    
    # 判斷一個字符串中第3個字符是否是字母
    str1 = 'sh是23.ssy23'
    char = str1[2]     # 將第3個字符取出
    print('是否是字母:', 'a' <= char <= 'z' or 'A' <= char <= 'Z')
    print('是否是中文:', '\u4e00' <= char <= '\u9fa5')
    

2. in和not in操作

語法 功能
字符串1 in 字符串2 判斷字符串2中是否包含字符串1(判斷字符串1是否是字符串2的子串)
字符串1 not in 字符串2 判斷字符串2中是否不包含字符串1(判斷字符串1是否是字符串2的子串)

示例:

print('abc' in 'hello abc')     # True
print('abc' in 'ahello bc')     # False

print('abc' not in 'hello abc')     # False
print('abc' not in 'ahello bc')     # True

print('A' in 'hello Abc')

3. len函數

len()可以對序列和字符串進行長度的計算

用法 功能
len(序列) 獲取序列長度, 獲取序列中元素的個數
len(字符串) 獲取字符串的長度(字符的個數)

注意:

  • 一個可以轉移的轉義字符的長度是1!
  • 一個編碼字符的長度是1痹雅!
  • 一個空格字符的長度是1仰担!
  • 手動在鍵盤上按一個tab,一般是4個空格绩社,長度是4; 一個\t來表示的tab摔蓝,長度是1

示例:

print(len('abc'))

str1 = input('請輸入:')
last_char = str1[len(str1)-1]    # 獲取輸入的字符串中的最后一個字符
print(last_char)

str1 = '    abc'
str2 = '\tabc'
print(str1)     #    abc
print(str2)     #    abc
print(len(str1), len(str2)) #7,4     # 手動輸入的tab和\t對應的字符個數可能不一樣!\t永遠是1

格式字符串

1.什么是格式字符串:

在字符串中通過格式占位符來代替字符串中變化的部分愉耙,然后在后面通過數據或者變量確定變化

語法:
包含占位符的字符串 % (值1, 值2, 值3...)
說明:
占位符 - %s  字符串
        %d  整數
        %f  小數   (%.Nf  保留小數點后N位小數)
        %c  字符  (可以將數字轉換成字符)
% - 固定寫法
() - 固定寫法贮尉,字符串中只有一個占位符的時候,這個()可以省略
括號中的值 - 值和占位符要一一對應(個數朴沿、類型猜谚、位置都要對應)

示例:

name = input('姓名:')
age = 18
sex = '男'
# 加操作
# mesage = '我叫XXX,今天xx歲,性別:X, 月薪x萬'
# mesage = '我叫'+name+',今年'+age+'歲赌渣,性別:'+sex
# print(mesage) 

# 格式字符串
message = '我叫%s,今年%s,性別:%s, 月薪%.2f萬 字符:%c' % (name, age, sex, 1.5, 97)
print(message)

練習: 輸入一個字符串, 用一個變量保存輸入的字符串的相關信息:XXX的長度是XX,最后一個字符是X
  例如: 輸入abc -> abc的長度是3,最后一個字符是c

input_str = input('輸入一個字符串:')    # 輸入jklsdjfklsjflksaj;
message = '%s的長度是%d, 最后一個字符是%c' % (input_str, len(input_str), input_str[-1])
print(message)  # jklsdjfklsjflksaj;的長度是18, 最后一個字符是;

print('%s-%d-%c' % ('abc', 100, 'A'))   # abc-100-A

類型轉換

  1. 基本語法
    • 語法:
         類型名(數據) - 將指定數據轉換成指定類型
    • 說明:
         類型名 - 任何python支持的魏铅,或者自定的類型都可以
         數據 - 需要轉換的對象(類型不同要求可能不一樣)

2. 轉換實例

函數 功能
int(數據) 將其他數據轉換成整型
float(數據) 將其他數據轉換成浮點型
bool(數據) 將其他類型轉換成布爾
str(數據) 將其他數據轉換成字符串
  • 轉換成整型

    示例:

    a = int(-10.90)   # 所有浮點數可以轉換成整數,直接保留整數部分
    b = int(False)    # 所有布爾可以轉化成整數坚芜, True -> 1; False -> 0
    c = int('-120')   # 只有去掉字符串的引號后本身就是一個整數的字符串才能轉換成整型
    print(a, b, c)
    
    age = input('年齡:')
    print(type(age), age)   # <class 'str'> , 15
    print('是否能進入網吧:', int(age) >= 18)   # 是否能進入網吧:False
    
  • 轉換成浮點型

    示例:

    a = float(100)     # 所有整數都可以轉換成浮點數览芳,在后面加.0
    b = float(True)    # 所有布爾可以轉化成浮點數, True -> 1.0; False -> 0.0
    c = float('12.9')  # 去掉引號后本身就是一個數字的字符串能轉換成浮點型
    print(a, b, c)
    
  • 轉換成布爾類型

    • python中所有的數據都可以轉換成布爾
    • 所有為空為0的值都會轉換成False,其他都是True

    示例:

    a = bool(0)
    b = bool(-0.0)
    c = bool('')
    d = bool([])
    e = bool({})
    f = bool(None)
    print(a, b, c, d, e, f)
    
  • 轉換成字符串類型

    python中所有的數據都可以轉換成字符串,而且轉換的時候就是單純的在最外面加引號

    示例:

    a = str(100)
    print(a)
    print('abc'+str(100))
    

    練習:輸入三個數字鸿竖,求三個數的和

    num1 = input('第一個數:')   # 1
    num2 = input('第二個數:')   # 2
    num3 = input('第三個數:')   # 3
    print(float(num1)+float(num2)+float(num3)) # 6.0
    

字符串的常用方法

提示: 表中所有字符串相關方法的使用方式都是: 字符串.方法名()

1. capitalize()

字符串.capitalize():將指定的字符串的第一個字符轉換成大寫字母,返回新的字符串

注意: 只有第一個字符是字母的時候才有效
如:

str1 = 'abc'
print(str1.capitalize())    # Abc

2.字符串對齊方式

方法 意義
字符串.center(width, fillchar) 居中
字符串.ljust(width, fillchar) 左對齊
字符串.rjust(width, fillchar) 右對齊

width決定新的字符串的長度, fillchar就是用來填充多出來的位置的字符

示例:

str1 = 'abc'
print(str1.center(7, '0'))  # 00abc00
print(str1.ljust(7, '*'))   # abc****
print(str1.rjust(7, '='))   # ====abc
print(str1.center(7))       #   abc  

3.count

字符串1.count(字符串2) - 在字符串1中統(tǒng)計字符串2出現的次數

print('abc and hight a'.count('abc')) # 1

4.isalpha

字符串.isalpha() - 判斷字符串中是否全是字母

注意:非ASCII碼表中的字符檢測不出來沧竟!

print('aSH'.isalpha())

5.join

字符串1.join(字符串2) - 將字符串1插入到字符串2中的每個字符之間

new_str = '**'.join('abc')
print(new_str)  # a**b**c

6.split

字符串1.split(字符串2) - 以字符串2去切割字符串1,返回一個列表

print('12,89,90'.split(','))    # ['12', '89', '90']

練習:輸入進班順序铸敏,然后自動產生對應的學號, py1809XXXX
例如:輸入1 ——> py18090001 輸入32 ——> py18090032 ...

num = input('請輸入順序號:')    # 1
# 生成序號后面變化的部分
# new_num = num.rjust(4, '0')
new_num = num.zfill(4)  # zfill(width) == rjust(width, '0')

# 添加固定部分
study_num = 'py1809'+new_num
print(study_num) #py18090001
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市悟泵,隨后出現的幾起案子杈笔,更是在濱河造成了極大的恐慌,老刑警劉巖糕非,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桩撮,死亡現場離奇詭異,居然都是意外死亡峰弹,警方通過查閱死者的電腦和手機店量,發(fā)現死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鞠呈,“玉大人融师,你說我怎么就攤上這事∫狭撸” “怎么了旱爆?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長窘茁。 經常有香客問我怀伦,道長,這世上最難降的妖魔是什么山林? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任房待,我火速辦了婚禮,結果婚禮上驼抹,老公的妹妹穿的比我還像新娘桑孩。我一直安慰自己,他們只是感情好框冀,可當我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布流椒。 她就那樣靜靜地躺著,像睡著了一般明也。 火紅的嫁衣襯著肌膚如雪宣虾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天温数,我揣著相機與錄音绣硝,去河邊找鬼。 笑死帆吻,一個胖子當著我的面吹牛域那,可吹牛的內容都是我干的。 我是一名探鬼主播猜煮,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼次员,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了王带?” 一聲冷哼從身側響起淑蔚,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎愕撰,沒想到半個月后刹衫,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡搞挣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年带迟,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片囱桨。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡仓犬,死狀恐怖,靈堂內的尸體忽然破棺而出舍肠,到底是詐尸還是另有隱情搀继,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布翠语,位于F島的核電站叽躯,受9級特大地震影響,放射性物質發(fā)生泄漏肌括。R本人自食惡果不足惜点骑,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谍夭。 院中可真熱鬧畔况,春花似錦、人聲如沸慧库。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽齐板。三九已至吵瞻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甘磨,已是汗流浹背橡羞。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留济舆,地道東北人卿泽。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親签夭。 傳聞我的和親對象是個殘疾皇子齐邦,可洞房花燭夜當晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內容