字符串 惊豺、 字符串的格式化表達式、 字符串的常用方法 (method)禽作、while 語句尸昧、語句嵌套

  • 回顧昨天知識

  • 表達式

    • 字符串

      '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

  • 語句回顧

    1. 表達式語句
    2. 賦值語句 name = input("xxxx: ")
    3. pass 語句
    4. 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)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末檐迟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子码耐,更是在濱河造成了極大的恐慌追迟,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骚腥,死亡現(xiàn)場離奇詭異敦间,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門廓块,熙熙樓的掌柜王于貴愁眉苦臉地迎上來金闽,“玉大人,你說我怎么就攤上這事剿骨〈撸” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵浓利,是天一觀的道長挤庇。 經(jīng)常有香客問我,道長贷掖,這世上最難降的妖魔是什么嫡秕? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮苹威,結果婚禮上昆咽,老公的妹妹穿的比我還像新娘。我一直安慰自己牙甫,他們只是感情好掷酗,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窟哺,像睡著了一般泻轰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上且轨,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天浮声,我揣著相機與錄音,去河邊找鬼旋奢。 笑死泳挥,一個胖子當著我的面吹牛,可吹牛的內容都是我干的至朗。 我是一名探鬼主播屉符,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼爽丹!你這毒婦竟也來了筑煮?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤粤蝎,失蹤者是張志新(化名)和其女友劉穎真仲,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體初澎,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡秸应,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年虑凛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片软啼。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡桑谍,死狀恐怖,靈堂內的尸體忽然破棺而出祸挪,到底是詐尸還是另有隱情锣披,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布贿条,位于F島的核電站雹仿,受9級特大地震影響,放射性物質發(fā)生泄漏整以。R本人自食惡果不足惜胧辽,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望公黑。 院中可真熱鬧邑商,春花似錦、人聲如沸凡蚜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽番刊。三九已至含鳞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芹务,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工鸭廷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留枣抱,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓辆床,卻偏偏與公主長得像佳晶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子讼载,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容