天天看點

Python基礎入門第六課--字元串    1.前言     2.單引号字元串和轉義引号    3.字元串方法    4.input和raw_input的關系

    1.前言 

        開門見山,首先來看這樣一個簡單的程式,我們稱它為“儀式感”。        

>>>print “Hello,World!”
           

       基本上在你學過的程式設計語言中,當你安裝好一個編輯器或者IDE,配置好你的環境,首先就是想再螢幕上列印出“Hello World!”,但是這個東西到底是什麼呢? 是字元串(也就是一串字元)。字元串在幾乎所有真實可用的Python程式中都會存在,并且有多種用法,其中最重要的用法就是表示一些文本。我們将分以下的類别來說一下字元串的具體用法。

    注意:在HTML/XML編輯器裡面生成的python代碼會有類似<span style="color:#333333;">的标簽語言,這部分不在代碼裡面,請自動忽略。

    2.單引号字元串和轉義引号

        在你的Pythonshell裡面輸入以下的代碼,注意自己觀察差別。

>>> "Hello,World!"
'Hello,World!'        
           
>>>"Let's go"
"Let's go"
           
>>> '"Hello my Wrold!",youzi said'
'"Hello my Wrold!",youzi said'
           

    在上述的代碼中,你應該可以看到以下幾點:

  1. 輸入時候字元串帶的是雙引号,輸出為單引号。
  2. 輸入的時候單引号和雙引号互相交替出現,但是并沒有影響最後的結果。

    但是有人就這樣想了,我能不能在已經包含單引号的字元串中再使用單引号去把整個字元串括起來?你可以試試看。

>>> ‘Let's go’
  File "<stdin>", line 1
    ‘Let's go’
    ^
SyntaxError: invalid syntax
           

    看!是不是出現了文法錯誤,原因在哪裡?

    當你使用正确的單引号或者雙引号來包括整個字元串時候,解釋器可以做出正确合理的處理,上述的例裡面解釋器無法正确解釋第二個單引号後面的内容,不知道怎麼去處理它。處理的方法也很靈活,我們可以像上面三個正确例子第三個一樣,采用雙引号去包括整個字元串,也可以像下面這樣處理。

>>>'Let\'s go!'
"Let's go!"
           

    這樣是不是很省事,解釋器就會認為你是一個聰明的人。原因在哪裡?解釋器會明白第二個單引号不是字元串的結束标記,就是一個普通的字元,進而可以正确的列印出你想要的結果,對于雙引号也可以采用這樣的方式來轉義。

    3.字元串方法

    1.字元串表示:str和repr

     str和repr實際上是值被轉換為字元串的兩種方法,可以通過str函數和repr函數對相應的值進行操作。str函數會把值轉換為合理形式的字元串,而repr函數會建立一個字元串,以合法的Python表達式的形式來表示值,來看下面的例子。 

>>>print repr("Hello,World!")
'Hello World!'
>>>print str("Hello,World!")
Hello,World!
           

    其中我們的repr(s)也可以寫做`s`  (注意是反引号嗷),在什麼地方可以用到呢?看一看下面這個例子就知道咯。

>>> money=1000
>>> print "The iphoneX is " +money
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
           

    矮油,怎麼有錯誤,再來

>>> money=1000
>>> print "The iphoneX is " + `money`
The iphoneX is 1000
           

    看見了沒有,神不神奇。但是在Python3.x裡面我們已經不再使用反引号了,希望你一直堅持使用repr函數去編寫一些程式。簡單、簡潔、易懂。

    2.字元串拼接

    直接上列子,大家一看就懂。

Python基礎入門第六課--字元串    1.前言     2.單引号字元串和轉義引号    3.字元串方法    4.input和raw_input的關系
>>> "America's leader say" '"I am volunteer join the CPC"' #Python直接拼接你輸入的正确表達的字元串
'America\'s leader say"I am volunteer join the CPC"'
           
>>> x='Hello' #拼接錯誤
>>> y='World!'
>>> x y
  File "<stdin>", line 1
    x y
      ^
SyntaxError: invalid syntax
           
Python基礎入門第六課--字元串    1.前言     2.單引号字元串和轉義引号    3.字元串方法    4.input和raw_input的關系

    不怕不怕,再來。

>>> x='Hello' #換一種方式再拼接
>>> y='World!'
>>> x+y
'HelloWorld!'
           

    3.長字元串的表示

    嗯哼,看一下這個代碼:

>>> print '''This is very long sting
... It continues here
... And it's not over yet
... "Hello,World!"
... Still here'''
This is very long sting
It continues here
And it's not over yet
"Hello,World!"
Still here
           

    長字元串表示的方法也很簡單,如果你想寫很多行,那麼記得用三個引号代替普通引号,當然也可以使用三個雙引号。在這種處理方式中,你可以在字元串裡面既使用單引号也使用雙引号,而不需要用反斜杠去轉義。    似不似很友善很強大嘞,記住它,以後會很有用。

    4.原始字元串

    還記得C語言裡面的換行符嘛,\n,這個磨人的小妖精,好像我們在最後的print語句裡面都要用到它,那麼它在python裡面會有什麼樣的效果呢,我們來看看。

>>> print 'Hello,\nGoogle'
Hello,
Google
           

    感覺看起來好像很棒的樣子,我們再來看看。

>>> path='D:\nsomeplace'
>>> path
'D:\nsomeplace'
>>> print path
D:
someplace
           

    這你你想要的嗎?你要按照這樣的路徑肯定找不到你想要的檔案,雖然在某一方面\n還是能起到一定的作用,可是我們還是盡可能的去避免它。進而就有了我們的原始字元串,原始字元串不會把反斜杠當做特殊字元,在原始字元串輸入的字元都會保持它原來的狀态,最原始的狀态嗷。

    來看看:

>>> print r'D:\nsomeplace'
D:\nsomeplace
           
>>> print r'D:\nsomeplace\noplace\anywhere'
D:\nsomeplace\noplace\anywhere
           

    原始字元串以r開頭,按常理來說可以在原始字元串裡面放入任何字元,注意這一點就好:不能在原始字元串結尾輸入反斜杠(除非你對反斜杠進行轉義),來看看。

>>> print r"This is illegal\"
  File "<stdin>", line 1
    print r"This is illegal\"
                            ^
SyntaxError: EOL while scanning string literal
           

    再來咯

>>> print r'This is llegal' '\\'
This is llegal\
           

    啊哈,是不是得到了你想要的結果咩。

    4.input和raw_input的關系

    看一個比較典型的例子,輸入youzi以後得到下面的輸出結果。

name=input("What is your name? ")
print "Hello, " + name + "!"
           
/usr/local/bin/python2.7 /Users/yangjiayuan/PycharmProjects/day/day02/sys.py
What is your name? youzi
Traceback (most recent call last):
  File "/Users/yangjiayuan/PycharmProjects/day/day02/sys.py", line 24, in <module>
    name=input("What is your name? ")
  File "<string>", line 1, in <module>
NameError: name 'youzi' is not defined

Process finished with exit code 1
           

    想一想問題在哪裡?

    input函數假設使用者會輸入正确并且合法的字元串,怎麼樣才算合法的呢?在這裡,就應該輸入“youzi”,而不應該直接輸入youzi。

>>> name=input("What is your name:")
What is your name:'youzi'
>>> print "Hello" + name + '!'
Helloyouzi!
           

     再來想想,使用者不是設計程式的人,怎麼會注意到這些呢?還要輸入合法的字元串,不存在的。使用者做的隻需要輸入自己認為準确的使用者名就好了。這就産生了raw_input函數,這個函數将使用者輸入的資料作為原始資料放入字元串中。看一個我們前面見過的程式。

import getpass

_username='alex'
_password='123'
user=raw_input("Please input username:")
pwd= raw_input("Please input password:")
if user==_username and pwd==_password:
    print("Welcome user %s login"%user)
else:
    print("Wrong username or password")
           
/usr/local/bin/python2.7 /Users/yangjiayuan/PycharmProjects/day/day02/login.py
Please input username:alex
Please input password:123
Welcome user alex login

Process finished with exit code 0
           

    在python3裡面不再有raw_input函數了,取而代之的就隻是input函數,這在後面的章節的有些程式裡面會展現出來,請大家注意觀察。

    好了,關于字元串的概述就先說這麼多。以後還會有大量的執行個體來讓大家看的,路還很長,加油各位!

    下一章節預告--序列