天天看點

據廖雪峰python3教程----python學習第三天

格式化輸出

Python中的格式化輸出與C語言是一緻的都可以用 % 來實作 eg:

1

2

3

4

<code>&gt;&gt;&gt; </code><code>'hello,%s'</code><code>%</code><code>'world'</code>

<code>'hello,world'</code>

<code>&gt;&gt;&gt; </code><code>'Hi,%s,you have $%d.'</code><code>%</code><code>(</code><code>'XiaoMing'</code><code>,</code><code>1000</code><code>)</code>

<code>'Hi,XiaoMing,you have $1000.'</code>

% 運算符是用來格式化字元串的。在字元串内部, %s 表示用字元替換,%d表示用整數替換,有幾個 %? 占位符,後面就跟幾個變量

或者值,順序要對應好。如果這有一個 %? , 括号可以省略。

%d

整數

%f

浮點數

%s

字元串

%x

十六進制數

其中,格式化整數和浮點數還可以指定是否補0和整數與小數的位數

<code>&gt;&gt;&gt; </code><code>'%2d-%02d'</code><code>%</code><code>(</code><code>3</code><code>,</code><code>1</code><code>)</code>

<code>'3-01'</code>

<code> </code><code>&gt;&gt;&gt; </code><code>'%.2f'</code><code>%</code><code>3.1415926</code>

<code>'3.14'</code>

%s 可以将任何資料類型轉化為字元串

<code>&gt;&gt;&gt; </code><code>'Age:%s.Grender:%s'</code><code>%</code><code>(</code><code>25</code><code>,</code><code>True</code><code>)</code>

<code>'Age:25.Grender:True'</code>

字元串裡面的<code>%</code>是一個普通字元怎麼辦?這個時候就需要轉義,用<code>%%</code>來表示一個<code>%</code>:

<code>&gt;&gt;&gt; </code><code>'growth rate: %d %%'</code><code>%</code><code>7</code>

<code>'growth rate: 7 %'</code>

練習

小明的成績從去年的72分提升到了今年的85分,請計算小明成績提升的百分點,并用字元串格式化顯示出<code>'xx.x%'</code>,隻保留小數點後1位:

5

<code>&gt;&gt;&gt; s1</code><code>=</code><code>72</code>

<code>&gt;&gt;&gt; s2</code><code>=</code><code>85</code>

<code>&gt;&gt;&gt; r</code><code>=</code><code>(s2</code><code>-</code><code>s1)</code><code>/</code><code>s1</code><code>*</code><code>100</code>

<code>&gt;&gt;&gt; </code><code>print</code><code>(</code><code>'%.2f%%'</code><code>%</code><code>r)</code>

<code>18.06</code><code>%</code>

使用list和tuple

list

Python内置的一種資料類型是清單:list。list是一種有序的集和,可以随時添加和删除其中的元素。

比如,列出同學的名字就可用 list 表示

<code>&gt;&gt;&gt; classmates </code><code>=</code> <code>[</code><code>'XiaoHong'</code><code>,</code><code>'LiSi'</code><code>,</code><code>'XiaoMing'</code><code>]</code>

<code>&gt;&gt;&gt; classmates                            </code>

<code>[</code><code>'XiaoHong'</code><code>, </code><code>'LiSi'</code><code>, </code><code>'XiaoMing'</code><code>]</code>

變量 classmates 就是一個 list 變量 可以用 len() 獲得 list 元素的個數

<code> </code><code>&gt;&gt;&gt; </code><code>len</code><code>(classmates)</code>

<code>3</code>

用索引來通路list中的每一個元素,索引從0開始

6

7

8

9

<code>&gt;&gt;&gt; classmates[</code><code>0</code><code>]</code>

<code>'XiaoHong'</code>

<code>&gt;&gt;&gt; classmates[</code><code>1</code><code>]</code>

<code>'LiSi'</code>

<code>&gt;&gt;&gt; classmates[</code><code>2</code><code>]</code>

<code>'XiaoMing'</code>

<code>&gt;&gt;&gt; classmates[</code><code>3</code><code>]</code>

<code>Traceback (most recent call last):  </code><code>File</code> <code>"&lt;stdin&gt;"</code><code>, line </code><code>1</code><code>, </code><code>in</code> <code>&lt;module&gt;</code>

<code>IndexError: </code><code>list</code> <code>index out of </code><code>range</code>

當給出的索引超出範圍時,python會給出錯誤報告,索引的最大值為 : len(classmates)-1

如果要去倒數第一個list元素 可以使用:

<code>&gt;&gt;&gt; classmates[</code><code>-</code><code>1</code><code>]</code>

<code>&gt;&gt;&gt; classmates[</code><code>-</code><code>2</code><code>]</code>

<code>&gt;&gt;&gt; classmates[</code><code>-</code><code>3</code><code>]</code>

<code>&gt;&gt;&gt; classmates[</code><code>-</code><code>4</code><code>]</code>

超出範圍時,python同樣會給出一個錯誤報告.

list 是一個可變的有序表,是以,可以往list中追加元素到末尾:

<code>&gt;&gt;&gt; classmates.append(</code><code>'Xiaochun'</code><code>)</code>

<code>&gt;&gt;&gt; classmates</code>

<code>[</code><code>'XiaoHong'</code><code>, </code><code>'LiSi'</code><code>, </code><code>'XiaoMing'</code><code>, </code><code>'Xiaochun'</code><code>]</code>

也可以把元素插入指定的位置,比如索引号為 1 的位置:

<code>&gt;&gt;&gt; classmates.insert(</code><code>1</code><code>,</code><code>'XiaoQiang'</code><code>)</code>

<code>[</code><code>'XiaoHong'</code><code>, </code><code>'XiaoQiang'</code><code>, </code><code>'LiSi'</code><code>, </code><code>'XiaoMing'</code><code>, </code><code>'Xiaochun'</code><code>]</code>

<code>&gt;&gt;&gt; classmates.insert(</code><code>3</code><code>,</code><code>'XiaoLv'</code><code>)</code>

<code>[</code><code>'XiaoHong'</code><code>, </code><code>'XiaoQiang'</code><code>, </code><code>'LiSi'</code><code>, </code><code>'XiaoLv'</code><code>, </code><code>'XiaoMing'</code><code>, </code><code>'Xiaochun'</code><code>]</code>

要删除list末尾的元素,用pop(i)方法,其中i是索引位置:

<code>&gt;&gt;&gt; classmates.pop(</code><code>2</code><code>)</code>

<code>[</code><code>'XiaoHong'</code><code>, </code><code>'XiaoQiang'</code><code>, </code><code>'XiaoLv'</code><code>, </code><code>'XiaoMing'</code><code>, </code><code>'Xiaochun'</code><code>]</code>

要把某個元素換成别的元素,可以直接指派給對應的索引位置:

<code>&gt;&gt;&gt; classmates[</code><code>1</code><code>]</code><code>=</code><code>'WangWu'</code>

<code>[</code><code>'XiaoHong'</code><code>, </code><code>'WangWu'</code><code>, </code><code>'XiaoMing'</code><code>]</code>

list 裡面的元素類型也可以不相同:

<code>&gt;&gt;&gt; L </code><code>=</code> <code>[</code><code>'nice'</code><code>,</code><code>True</code><code>,</code><code>123</code><code>]</code>

<code>&gt;&gt;&gt; L</code>

<code>[</code><code>'nice'</code><code>, </code><code>True</code><code>, </code><code>123</code><code>]</code>

list 的元素也可以是另外一個 list :

<code>&gt;&gt;&gt; a</code><code>=</code> <code>[</code><code>'python'</code><code>,</code><code>'java'</code><code>,[</code><code>'asp'</code><code>,</code><code>'php'</code><code>,</code><code>1111</code><code>],</code><code>'learn'</code><code>]</code>

<code>&gt;&gt;&gt; a</code>

<code>[</code><code>'python'</code><code>, </code><code>'java'</code><code>, [</code><code>'asp'</code><code>, </code><code>'php'</code><code>, </code><code>1111</code><code>], </code><code>'learn'</code><code>]</code>

<code>&gt;&gt;&gt; </code><code>len</code><code>(a)</code>

<code>4</code>

要注意a隻有4個元素,其中a<code>[2]</code>又是一個list,如果拆開寫就更容易了解了:

<code>&gt;&gt;&gt; s</code><code>=</code><code>[</code><code>'asp'</code><code>,</code><code>'php'</code><code>,</code><code>1111</code><code>]</code>

<code>&gt;&gt;&gt; a</code><code>=</code> <code>[</code><code>'python'</code><code>,</code><code>'java'</code><code>,s,</code><code>'learn'</code><code>]</code>

要拿到<code>'php'</code>可以寫<code>p[1]</code>或者<code>s[2][1]</code>,是以<code>s</code>可以看成是一個二維數組,類似的還有三維、四維……數組,不過很少用到。

如果一個list中一個元素也沒有,就是一個空的list,它的長度為0:

<code>&gt;&gt;&gt; l</code><code>=</code><code>[]</code>

<code>&gt;&gt;&gt; </code><code>len</code><code>(l)</code>

<code>0</code>

tuple

另一種有序清單叫元組:tuple. tuple 與 list 類似,但是 tuple 一旦初始化就不能修改,eg:

<code>&gt;&gt;&gt; classmates</code><code>=</code><code>(</code><code>'xiaoming'</code><code>,</code><code>'xiaoqiang'</code><code>,</code><code>'xiaohong'</code><code>)</code>

<code>(</code><code>'xiaoming'</code><code>, </code><code>'xiaoqiang'</code><code>, </code><code>'xiaohong'</code><code>)</code>

現在,classmates這個tuple不能變了,它也沒有append(),insert()這樣的方法。其他擷取元素的方法和list是一樣的,你可以正常地使用<code>classmates[0]</code>,<code>classmates[-1]</code>,但不能指派成另外的元素。

<code>'xiaoqiang'</code>

<code>'xiaohong'</code>

<code>&gt;&gt;&gt; classmates[</code><code>1</code><code>]</code><code>=</code><code>'xiaoxin'</code>

<code>TypeError: </code><code>'tuple'</code> <code>object</code> <code>does </code><code>not</code> <code>support item assignment</code>

不可變的tuple有什麼意義?因為tuple不可變,是以代碼更安全。如果可能,能用tuple代替list就盡量用tuple。

tuple的陷阱:當你定義一個tuple時,在定義的時候,tuple的元素就必須被确定下來,比如:

<code>&gt;&gt;&gt; t</code><code>=</code><code>(</code><code>1</code><code>,</code><code>2</code><code>)</code>

<code>&gt;&gt;&gt; t</code>

<code>(</code><code>1</code><code>, </code><code>2</code><code>)</code>

如果要定義一個空的tuple,可以寫成<code>()</code>:

<code>&gt;&gt;&gt; t</code><code>=</code><code>()</code>

<code>()</code>

但是,如果隻有一個元素的tuple,如果你這麼定義:

<code>&gt;&gt;&gt; t</code><code>=</code><code>(</code><code>1</code><code>)</code>

<code>1</code>

定義的不是 tuple ,是 1 這個數!  這是因為這個()即可表示tuple,又可以表示數學裡的小括号,這就産生了歧義,是以,

python 規定,這種情況下小括号計算,計算結果就是1.

是以,隻有1個元素的 tuple 定義時 必須加一個逗号,來消除歧義:

<code>&gt;&gt;&gt; t</code><code>=</code><code>(</code><code>1</code><code>,)</code>

<code>(</code><code>1</code><code>,)</code>

python 在顯示隻有一個元素的tuple時,也會在後面加上一個 逗号 ,避免誤解為 數學計算上的括号

最候來看一個“可變的‘tuple’”:

<code>&gt;&gt;&gt; t</code><code>=</code><code>(</code><code>'a'</code><code>,</code><code>'b'</code><code>,[</code><code>'A'</code><code>,</code><code>'B'</code><code>])</code>

<code>&gt;&gt;&gt; t[</code><code>2</code><code>][</code><code>0</code><code>]</code><code>=</code><code>'X'</code>

<code>&gt;&gt;&gt; t[</code><code>2</code><code>][</code><code>1</code><code>]</code><code>=</code><code>'Z'</code>

<code>(</code><code>'a'</code><code>, </code><code>'b'</code><code>, [</code><code>'X'</code><code>, </code><code>'Z'</code><code>])</code>

這個tuple定義的時候有3個元素,分别是 ‘a’,‘b’和一個 list。 不是說tuple一旦定義後就不可變了嗎?怎麼後來又變了?

别急,我們先看看定義的時候tuple包含的3個元素:

<a href="http://s4.51cto.com/wyfs02/M00/7D/AE/wKioL1btUHbgT2oWAAAaeqO2l88208.png" target="_blank"></a>

當我們把list的元素<code>'A'</code>和<code>'B'</code>修改為<code>'X'</code>和<code>'Y'</code>後,tuple變為:

<a href="http://s4.51cto.com/wyfs02/M02/7D/AE/wKioL1btUIrS2OyxAAAao5cU28I540.png" target="_blank"></a>

表面上看,tuple的元素變了,實際上是list的元素變了 ,tuple所謂的“不變”是說,tuple的每個元素,隻想永遠不變,

即指向‘a’,就不能變成指向‘b’,指向一個 list 就不能改變指向其他對象,但指向這個 list 本身是會變的。

了解了“指向不變”後,要建立一個内容也不變的tuple怎麼做?那就必須保證tuple的每一個元素本身也不能變。

請用索引取出下面list的指定元素:

L = [

    ['Apple', 'Google', 'Microsoft'],

    ['Java', 'Python', 'Ruby', 'PHP'],

    ['Adam', 'Bart', 'Lisa']

]

# 列印Apple:

print(?)

# 列印Python:

# 列印Lisa:

10

11

<code>&gt;&gt;&gt; L </code><code>=</code> <code>[</code>

<code>...     [</code><code>'Apple'</code><code>, </code><code>'Google'</code><code>, </code><code>'Microsoft'</code><code>],</code>

<code>...     [</code><code>'Java'</code><code>, </code><code>'Python'</code><code>, </code><code>'Ruby'</code><code>, </code><code>'PHP'</code><code>]</code>

<code>,...     [</code><code>'Adam'</code><code>, </code><code>'Bart'</code><code>, </code><code>'Lisa'</code><code>]</code>

<code>... ]</code>

<code>&gt;&gt;&gt; </code><code>print</code><code>(L[</code><code>0</code><code>][</code><code>0</code><code>])</code>

<code>Apple</code>

<code>&gt;&gt;&gt; </code><code>print</code><code>(L[</code><code>1</code><code>][</code><code>1</code><code>])</code>

<code>Python</code>

<code>&gt;&gt;&gt; </code><code>print</code><code>(L[</code><code>2</code><code>][</code><code>2</code><code>])</code>

<code>Lisa</code>

本文轉自 nw01f 51CTO部落格,原文連結:http://blog.51cto.com/dearch/1752954,如需轉載請自行聯系原作者