python字符串计算加法_【python入門教室】(3) 列表和字串也想做加法和乘法?

一般來說,我們覺得加減乘除好像是數字的專利,

然而在python中,列表和字串是有加法和乘法可以用的,

讓我們能夠更方便的操作列表和字串

譬如說如果我們希望有一個字串s

字串的內容是"Hello"連續寫五次可以怎麼寫呢?

第一個方法就是乖乖把"Hello"打五次,寫:

s="HelloHelloHelloHelloHello"

但是這樣寫有個明顯的缺點,

若你需要寫一百次"Hello"將會非常占篇幅,

並且如果想要把"Hello"寫i次(i是變數)則沒辦法處理

因此通常用for迴圈是比較好的解法:

s=""

for i in range(5):

s = s + "Hello"

# s 的值變成"HelloHelloHelloHelloHello"

但這樣似乎仍顯囉唆,

python有很方便的運算子,加法(+)和乘法(*),

如果用在字串或列表上的意思便是「串接」和「重複」。

上述程式其實只需一行,再也不必打一堆迴圈了:

s="Hello" * 5

接著示範更多例子:

>>> "234"+"abc"

'234abc'

>>> "2"+"3"

'23'

>>> "真" * 5 + "高興見到你"

'真真真真真高興見到你'

融會貫通,加法(+)和乘法(*)亦可以用在列表上:

>>> [2,4]+[5,6,9]

[2, 4, 5, 6, 9]

>>> [1] * 6

[1, 1, 1, 1, 1, 1]

有了這樣方便直覺的運算子,

其實可以非常方便的幫助我們繪製各種有趣的圖形

範例: 階梯圖形

教大家如何在螢幕上印出階梯圖形,

我們希望在螢幕上顯示7階的階梯,如下:

*

**

***

****

*****

******

*******

大家可以先停下來想一想怎麼做。

想好了嗎?有字串的重複運算應該不會太難,

觀察圖形,我們要

在第一行印出1顆星星,

在第二行印出2顆星星,

在第i行印出i顆星星。

因此用一層for迴圈遍歷即可:

for i in range(1,8):

print('*' * i)

範例: 金字塔圖形

教大家如何在螢幕上印出階梯圖形,

我們希望在螢幕上顯示7階的金字塔,如下:

*

***

*****

*******

*********

***********

*************

大家也可以先停下來想一想怎麼做。

我們一樣觀察圖形,

第i行需要印的空格數= 總行數 - i

第i行需要印的星星數= 2*i -1

程式如下:

for i in range(1,8):

print(' ' * (7-i) + '*' * (2*i-1))

範例: 菱形星星

教大家如何在螢幕上印出菱形星星,

我們希望在螢幕上顯示到最寬為(7*2-1)個星星的菱形,如下圖:

*

***

*****

*******

*********

***********

*************

***********

*********

*******

*****

***

*

先停下來想一想怎麼做再往下看答案哦。

想到了嗎?

其實菱形星星我們可以想成是由前一個範例的「7階正金字塔」與一個「6階倒金字塔」組合的圖形。

那要如何印出「倒金字塔」呢?

其實就是把列印正金字塔的順序倒著印出來就行了。

這邊再教大家一個內建函數reversed(),倒轉range的值。

原本range(1,7)表示「1,2,3,4,5,6」,

加上reversed(range(1,7))就成了「6,5,4,3,2,1」

for i in reversed(range(1,7)):

print(' ' * (6-i) + '*' * (2*i-1))

結果為一個「6階倒金字塔」:

***********

*********

*******

*****

***

*

因此印出整個菱形可以這樣寫:

for i in range(1,8):

print(' ' * (7-i) + '*' * (2*i-1))

for i in reversed(range(1,7)):

print(' ' * (7-i) + '*' * (2*i-1))

注意拼成菱形時,「6階倒金字塔」前面會多一個空格,

因此第四行應寫 print(' ' * (7-i) + '*' * (2*i-1))

而非 print(' ' * (6-i) + '*' * (2*i-1))。

希望今天的內容大家覺得有趣

課後練習

今天的習題為自己出的,

暫不從CodeWar上面找

習題: 密碼不外漏

基於資安,我們知道正常在網頁上登錄頁面輸入密碼欄位時,

密碼欄位都是看不到內容的,避免旁人偷窺。

如圖示:

請你實作一個函數hidePassword(),

def hidePassword(psd):

return #這邊輸入你要回傳的資料

參數psd表示一個非空字串,

在函數中回傳該字串的密碼字,防止別人偷窺密碼悠。

舉例來說:

輸入: psd = "password"

輸出: "********"

輸入: psd = "123"

輸出: "***"

歡迎留言討論

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值