主題

從零開始的python ep.4 字串 (格式化)

黑子 | 2021-03-20 10:13:12 | 巴幣 2 | 人氣 58

字串是程式語言中相當重要的一部分,經常被使用到,例如傳達資訊給使用者,獲取使用者的輸入資料
Python 內建函數庫,有多種函數可以直接使用
不只是字串有函數庫,其他資料型別也有類似的函數庫
表示方法為  s[index]
有索引值(index),會回傳所代表的字元, 值得一提的是,index值也可以是負數
老慣例,從0開始,不包含終止值,所以第12是第11
輸入負值也可以從字串中找到對應的字元
另外 [index] 其中的index又可以表示成[start : end : step]
預設start為0 ,step為1,透過修改參數,可以切出字串中的元素,當然也可以用後面的方法來進行處理
以下是範例
只輸入[-5]就是取-5這個位置的字元
[-5:]就是從-5(起始值)取到-1 (由左往右,由頭至尾)
[:6] 就是從0(起始值)取到6 (由左往右,由頭至尾)
當然字串的相加,可以在python輕鬆用加法處理
雖然本篇要談字串,但後來發現只打到這邊,篇幅太短,所以額外加上格式化與方法


字串小單元結束了,之後重點在於格式化方法
格式化就是%d %s %2f .....的使用
方法則有助於處理資料的內容或是分類
先談格式化 (這邊內容較少,之後慢慢補,使用也相對簡單,一個蘿蔔一個坑,%不要忘記)
Python 有個特別的輸出方式,就是所謂的格式化,
這跟硬碟的格式化意思不同,這裡指的是在輸出的位置先以「%」與其他文字做結合,後面再將要輸出的資訊,於"字串"之後加以詳述
好處是可以在格式化的時候規定輸出的格式
例如,在print 函數的引數中以字串方式表達包含下表中描 述內容所欲格式化的類型,然後再於%( ) 中填入欲格式化 的變數名稱
例如
print('text%x' %(tmp))    x對應tmp
%d 用來表示以十進位的整數 (對應int)
%f 將浮點數以十進位表示 (對應float)
%s 將字串輸出(對應str)
%e & %E 將浮點數以十進位以及科學記號方式輸出
加入- (負號)會向左對齊   ex.%-3d
加入+號會將數值的正負顯示出來   ex. %+5d
加入數字,會將數字與字串長度比較,如果數字大於字串,會讓字串靠右對齊,並在左側補上空格
舉例 %15d
以%f %e %E表示時,%後面的小數點,可接數字用來表示要顯示的位數
舉例 最常用的顯示到第二位 %.2f  (四捨五入)
字串也可以取位數

輸出結果


以下是以九九乘法表進行說明&簡單示範
h=int(input())
w=int(input())
for i in range(1,h+1):   #不含終止值,所以要加一
    for j in range(1,w+1):
        print("%d*%d=%2d "%(i,j,i*j),end="")   #%2d後面有一個空白
    print() #記得換行

輸出之後會像這樣
輸入5 enter >>3 enter ,得到5*3的結果,因為範圍是確定的(沒有重複嘗試)
所以用for來做
當需要反覆執行的話(沒有明確範圍)
下面是必須記熟的寫法,到-1會停止(此時的-1是字串)
n=input()
while n!="-1":
    print(n)
    n=input()
這個while迴圈格式會反覆用到(可以讓使用者反覆輸入)

在python 第三版之後也多了用方法來格式化的方法
這個方法就是 .format()   #特別注意,只能用{}
以下是範例
輸出結果
   有沒有很神奇.....好吧,好像還好

本來講完字串跟格式化 (%的應用)
想繼續講方法,在python中,除了有強大的函數,更有好用的方法
方法雖然沒有特殊的顏色呈現,但它的強大之處,相較函數有過之而無不及
但礙於篇幅關係,黑子把方法移到Ep.5了
所以我們就下篇再會囉

附上一些格式化練習
台北市某大學的段考特別難,老師決定幫大家調分,調分規則如下:
原始分數開根號乘以10,並列印出原始分數以及調分後的分數
格式如下
輸入 50之後
輸出
Original: 50.00
Adjusted: 70.71(+21)
(可以自己先練習看看,再參考黑子的作法喔)






import math #為了要用開根號,也可以用**0.5
original=float(input())   #取成浮點數
print("Original:","%.2f"%original)   
adjust= math.sqrt(original)*10
add=round(adjust - original)
print("Adjusted: ","%.2f"%adjust,"(+",add,")",sep="")
最後一行的print 在我理解了%的格式化之後我把它改成
print("Adjusted: %.2f(+%d)"%(adjust,add))  舒服多了
送禮物贊助創作者 !
0
留言

創作回應

更多創作