Python字串的運用

小啊萍i發表於2019-03-21

字串(String)

什麼是字串

​ 字串是Python中最常用的資料型別.我們可以使用引號(“或”)來 建立字串.事實上,在Python中,加了引號的字元都被認為是字串.

name="china"   		    #雙引號
age="5000"     		    #只要加雙引號就是字串
age_1=5000     		    #不加,整形
a="""i love you"""  	#三雙單引號
b='''i love you'''  	#三單引號
c='love'  			   #單引號
print(type(name),type(age),type(type_1),type(a),type(a),type(b),type(c),sep="|")

<class 'str'>|<class 'str'>|<class 'int'>
<class 'str'>|<class 'str'>|<class 'str'>

多引號有什麼作用?作用就是多行字元必須用多引號

a="""
輕輕的我走了,
正如我輕輕的來;
我輕輕的招手,
作別西天的雲彩.
"""
print(a)

字串運算及操作

​ 數字可以進行加減乘除等運算,字串呢?讓我大聲告訴你,也能?what?是的,但只能進行"相加"和"相乘"運算.

1.拼接(+)

>>> a="Hello"
>>> b="Python"
>>> a+b
'HelloPython'

注意,字串的拼接只能是雙方都是字串,不能跟數字或其他的型別拼接.

2.重複

>>> a="Hello"
>>> a*3
'HelloHelloHello'

3.字串索引([]以及切片[::])

#########012345678901234567890123456789
>>> a="Life is short, I use python"
>>> len(a)
27
>>> #索引
>>> a[0]
'L'
>>> a[-27]
'L'
>>> a[0:4]      #包頭不包尾
'Life'
>>> a[8:13:2]
'sot'
>>>#切片
...
>>> a[:13]      #第一個元素開始一直到第12個元素
'Life is short'
>>> a[15:]      #從索引值為15的元素開始  一直到最後一個元素
'I use python'
>>> a[15::2]    #從索引值為15的元素開始 步長為2 即跳過每一個元素   一直到最後一個元素
'Iuepto'
>>> a[::-1]     #逆序輸出
'nohtyp esu I ,trohs si efiL'
>>>

4.大小寫轉換

  • str.lower():轉小寫

  • str.upper():轉大寫

  • str.swapcase():大小寫對換

  • str.capitalize():字串首為大寫,其餘為小寫

  • str.title():以分隔符為標記,首字元為大寫,其餘為小寫

    >>> a="Life is short, I use python"
    >>> a.lower()       #將所有大寫字元轉換為小寫字元
    'Life is short, i use python'
    >>> a.upper()       #將所有小寫字元轉換為大寫字元
    'LIFE IS SHORT, I USE PYTHON'
    >>> a.swapcase()    #將所有小寫字元變成大寫,將大寫字元變成小寫
    'lIFE IS SHORT, i USE PYTHON'
    >>> a.capitalize()  #將字串的第一個字元大寫
    'Life is short, i use python'
    >>> a.tiale()       #返回標題化的字串
    'Life Is Short, I Use Python'
    >>>
    
#不區分大小寫
	input_str="AbDc"
	a=input("請輸入驗證碼:")
	if input_str.lower()==a.lower():
    	print("輸入正確")
	else:
    	print("輸入錯誤")

5.字串格式輸出對齊

  • str.center()

  • str.ljust()

  • str.rjust()

  • str.zfill()

    >>> a="Life is short, I use python"
    >>> a.center(35,'*')  #返回一個原字元居中,並使用空格填充至長度 width 的新字串
    '****Life is short, I use python****'
    >>> a.ljust(35,'*')   #返回一個原字元左對齊,並使用空格填充至長度 width 的新字串
    'Life is short, I use python********'
    >>> a.rjust(35,'*')   #返回一個原字串右對齊,並使用空格填充長度 width 的新字串
    '********Life is short, I use python'
    >>> a.zfill(35)       #返回長度為 width的字串,原字串string右對齊,前面填充0,只有一個引數,zerofill
    '00000000Life is short, I use python'
    
    

6.刪除指定字元

  • str.lstrip()
  • str.rstrip()
  • str.strip()
>>> a="****Life is short, I use python****"
>>> a.lstrip("*")
'Life is short, I use python****'
>>> a.rstrip("*")
'****Life is short, I use python'
>>> a.strip("*")
'Life is short, I use python'
>>>

7.計數

=COUNTIF(B2:B31, “>=30”)/COUNT(B2:B31

>>> a="Life is short, I use python"
>>> a.count('i')     #返回 str在string裡面出現的次數
2
>>> a.count('i',4,8) #在索引值為(4,8)的範圍內 str出現的次數
1
>>>

8.字串搜尋定位與替換

  • str.find()
>>> a="Life is short, I use python"
>>> a.find('e')        #查詢元素並返回第一次出現的索引值
3
>>> a.find('e',18,24)  #查詢元素在指定索引範圍內的索引
19
>>> a.find('w')		   #找不到值返回-1
-1
  • str.index()

    ​ 和find()方法一樣,只不過如果str不在string中會報一個異常

    >>> a="Life is short, I use python"
    >>> a.index('e')
    3
    >>> a.index('e',18)
    19
    >>> a.index('w')
    Tranceback(most recent call last):
       File "<stdin>",line 1, in <module>
    ValueErroe:substring not found
    >>>
    
  • str.replace()

    >>> a="Life is short, I use python"
    >>> areplace('I use','You need')
    'Life is short, You need python'
    >>> a.replace('t','T')
    'Life is shorT, I use pyThon'
    >>> a.replace('t','T',1)
    'Life is shorT, I use python'
    >>>
    

高老師 2019/3/18 16:28:52
9.字串條件判斷

  • isalnum(),字串由字母或數字組成,
  • isalpha(),字串只由字母組成,
  • isdigit(),字串只由數字組成
In [1]: a = "abc123"

In [2]: b = "ABC"

In [3]: c = 123

In [4]: a.isalnum()
Out[4]: True

In [5]: a.isalpha()
Out[5]: False

In [6]: a.isdigit()
Out[6]: False

In [7]: b.isalnum()
Out[7]: True

In [8]: b.isalpha()
Out[8]: True

In [9]: b.isdigit()
Out[9]: False>>> str = '01234'
 
>>> str.isalnum()                  #是否全是字母和數字,並至少有一個字元
True
>>> str.isdigit()                  #是否全是數字,並至少有一個字元
True      
 
 
>>> str = 'string'
 
>>> str.isalnum()                  #是否全是字母和數字,並至少有一個字元
True
>>> str.isalpha()                  #是否全是字母,並至少有一個字元 
True
>>> str.islower()                  #是否全是小寫,當全是小寫和數字一起時候,也判斷為True
True
 
>>> str = "01234abcd"
 
>>> str.islower()                  #是否全是小寫,當全是小寫和數字一起時候,也判斷為True
True
 
>>> str.isalnum()                  #是否全是字母和數字,並至少有一個字元
True
 
>>> str = ' '
>>> str.isspace()                  #是否全是空白字元,並至少有一個字元
True
 
>>> str = 'ABC'
 
>>> str.isupper()                  #是否全是大寫,當全是大寫和數字一起時候,也判斷為True
True
 
>>> str = 'Aaa Bbb'
 
>>> str.istitle()                  #所有單詞字首都是大寫,標題 
True
 
 
>>> str = 'string learn'
 
>>> str.startswith('str')        #判斷字串以'str'開頭
True
 
>>> str.endswith('arn')           #判讀字串以'arn'結尾
True

10.製表符轉化

str.expandtabs()

>>> a="L\tife is short, I use python"
>>> a.expandtabs()  #預設將製表符轉化為8個空格
'L        ife is short, I use python'
>>> a.expandtabs(4) #加上引數,將製表符轉化為對應個數的空格
’L    ife is short, I use python'
>>>

11.ASCll碼和字元的轉化

  • chr():用一個範圍內在range(256)內的(就是0~255)整數作引數,返回一個對應的字元.

  • ord():將一個ASCll字元轉換為字元為對應的數字

  • >>> chr(65)
    'A'
    >>> ord('a')
    97
    

12.字串的分割

  • join()將指定字元插入到元素之間
  • split()以指定字元分隔序列且去除該字元
  • partition()以指定字元分隔序列且包含該字元
#join
>>> str="learn string"
>>> '-'.join(str)
'l-e-a-r-n- -s-t-r-n-g'
>>> '+'.join(str)
'l+e+a+r+n+ +s+t+r+n+g'
>>> li=["learn string"]
>>>'-'.join(li)
'learn-string'

#split
>>> str.split('n')
['lear','stri','g']
>>> str.split('n',1)
['lear', ' string']
>>> str.rsplit('n',1)
['learn stri', 'g']
>>> str.splitlines()
['learn string']

#partition
>>> str.partition('n')
('lear', 'n', ' string')
>>> str.rattition('n')
('learn stri','n','g')
>>>

補充:

string模板

檢視:

>>> import string
>>> dir(string)
['Formatter', 'Template', '_ChainMap', '_TemplateMetaclass', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_re', '_string', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace']
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.capwords('hUNAN yingxiao college')
'Hunan Yingxiao College'
>>>
  • string模組中的capwords()函式功能:

  • 1.將每個單詞首字母置為大寫

  • 2.將每個單詞除首字母外的字母均置為小寫;

  • 3.將詞與詞之間的多個空格用一個空格代替

  • 4.其擁有兩個引數,第二個引數用以判斷單詞之間的分割符,預設為空格。

    >>> import string
    >>> string.digits
    '0123456789'
    >>> string.hexdigits
    '0123456789abcdefABCDEF'
    >>> string.octdigits
    '01234567'
    >>> string.printable
    '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-.<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
    >>> string.puntuation
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: module 'string' has no attribute 'puntuation'
    >>> string.punctuation
    '!"#$%&\'()*+,-.<=>?@[\\]^_`{|}~'
    >>>
    
    ---info of Linus---
    Name  :  Linus
    Age   :  18
    job   :  IT
    Hobbie:  Read
    -------end------
    

    你怎麼實現呢?你會發現,用字元拼接的方式還難實現這種格式的輸出,所以一起來學一下新姿勢

    只需要把要列印的格式先準備好, 由於裡面的 一些資訊是需要使用者輸入的,你沒辦法預設知道,因此可以先放置個佔位符,再把字串裡的佔位符與外部的變數做個對映關係就好啦。

name=input("Name:")
age=input("Age:")
job=input("Job:")
hobbie=input("Hobbie:")
info='''
---info of %s---
Name  :\t %s
Age   :\t %s
job   :\t %s
Hobbie:\t %s
-------end------
'''%(name,name,age,job,hobbie)#這行的%就是把前面的字串與括號後面的變數關聯起來
print(info)

"%"是Python風格的字串格式化操作符,非常類似C語言裡的printf()函式的字串格式化(C語言中也是使用%)。

下面整理了一下Python中字串格式化符合:

格式化符號 說明
%c 轉換成字元(ASCII 碼值,或者長度為一的字串)
%r 優先用repr()函式進行字串轉換
%s 優先用str()函式進行字串轉換
%d / %i 轉成有符號十進位制數
%u 轉成無符號十進位制數
%o 轉成無符號八進位制數
%x / %X 轉成無符號十六進位制數(x / X 代表轉換後的十六進位制字元的大小寫)
%e / %E 轉成科學計數法(e / E控制輸出e / E)
%f / %F 轉成浮點數(小數部分自然截斷)
%g / %G %e和%f / %E和%F 的簡寫
%% 輸出% (格式化字串裡面包括百分號,那麼必須使用%%)

這裡列出的格式化符合都比較簡單,唯一想要強調一下的就是"%s"和"%r"的差別。

看個簡單的程式碼:

>>> a=15
>>> print(("%d to hex is %x") %(a,a))
15 to hex is F
>>> "%x" % 15
'f'
>>> "%f" %15
'15.000000'
>>> "%e" % 15000
'1.500000e+04'
>>> "%d" %100
'100'
>>> "%d%%" % 100
'100%'

相關文章