自學python如何成為大佬(目錄):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501
print()函數是Python編程最常見的函數,常用于輸出程序結果,默認輸出到屏幕,也可以輸出到指定文件。
語法參考
print()函數的語法格式如下:
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
參數說明:
l??value:表示要輸出的值;可以是數字、字符串、各種類型的變量等;
l??…:值列表,表示可以一次性打印多個值;輸出多個值時,需要使用“,”(英文半角的逗號)分隔,打印出來各個值之間默認用空格隔開;
l??sep:表示打印值時,各個值之間的間隔符,默認值是一個空格,可以設置為其他的分隔符;
l??end:表示打印完最后一個值需要添加的字符串,用來設定輸出語句以什么結尾,默認是換行符“\n”,即打印完會跳到新行,可以換成其他字符串,如end='\t'?或end=' '等,以實現不換行輸出;
提示:sep和end的參數必須是字符串;或者為None,為None時意味著使用其默認值。
l??file:表示輸出的目標對象,可以是文件也可以是數據流,默認是sys.stdout。可以設置“file =?文件儲存對象”,把內容存到該文件中;
l??flush:表示是否立刻將輸出語句輸出到目標對象,flush值為False或者True,默認flush=False,表示輸出值會保存在緩存中;當flush=True時,輸出值強制寫入文件。
注意:sep、end、file、flush都必須以命名參數方式傳參,否則會被當作需要輸出的對象。
?
提示:如果print()函數不傳遞任何參數,將會輸出end參數的默認值,即打印一個空行。
快用錦囊
錦囊01??輸出字符串
字符串可以直接輸出,也可以和數字、運算符等形成表達式進行輸出。示例代碼如下:
print()?????????????????????#?輸出一個空行
print('')???????????????????#?輸出一個空行
#使用三引號可多行輸出字符,如三行輸出的服務器登錄界面
print('''??????登錄服務器
管理員:___________
密??碼:___________??? '''??)??????????#?字符最前和最后用三引號
運行結果如下:
?
?
??????登錄服務器
管理員:___________
密??碼:___________
?
print("沒有偉大的愿望,就沒有偉大的天才!")???#?使用雙引號將字符串括起來
運行結果如下:
沒有偉大的愿望,就沒有偉大的天才!
?
print('go big or go home')???????????????????#?使用單引號將字符串括起來
運行結果如下:
go big or go home
?
print('go','big','or','go','home')?????????#?字符之間用','間隔,則字符串用空格連接
運行結果如下:
go big or go home
?
print('go' 'big' 'or' 'go' 'home')?????????#?字符之間不用','間隔,則字符串無空格連接
運行結果如下:
Gobigorgohome
?
print('go'+?'big'+?'or'+'go'+'home')???#?用加號“+”?連接輸出字符串
運行結果如下:
Gobigorgohome
?
print('www','mingrisoft','com',sep='.')????#?設置間隔符,字符之間用'.'間隔
運行結果如下:
www.mingrisoft.com
?
print('2020','7','24',sep='-')??????????????#?設置間隔符,字符之間用'-'間隔
運行結果如下:
2020-7-24
?
print(50 *?'= ')????????????#?一次輸出多個字符,使用數字、運算符和字符串
運行結果如下:
===================================================================
?
#?使用chr()函數,根據字符的ASCII值,輸出字符
print(chr(65))??????????????#?大寫字母的ASCII值為65~90
運行結果如下:
A
?
print(chr(97))??????????????#?小寫字母的ASCII值為97~122
運行結果如下:
a
?
print(chr(8544),chr(8545),chr(8546),chr(8547))
運行結果如下:
Ⅰ?Ⅱ?Ⅲ?Ⅳ
?
#?使用ord()函數將字符轉換為對應的整數
print(ord('生'),ord('化'),ord('危'),ord('機'))
運行結果如下:
29983 21270 21361 26426
錦囊02??輸出數值
數值類型可以直接輸出,但使用“+”連接數值和其他數據類型時,系統會默認為是加法計算,會報錯。可以使用“,”連接,或者將數值作為字符串來處理,兩端加單引號或雙引號。示例代碼如下:
print(1314)???????????????????????#?直接輸出整數,可不帶雙引號或單引號。輸出結果:1314
print(12.22)??????????????????????#?直接輸出浮點數。輸出結果:12.22
print(10 / 3)?????????????????????#?可以包含算術表達式,輸出運算結果為:3.3333333333333335
print(100 * 3.13 + 60)???? ??????#?可以包含算術表達式,輸出運算結果為:373
print(2, 0, 2, 0)?????????????????#?使用“,”連接要輸出的數值,中間用空格連接。輸出結果:2 0 2 0
print(192, 168, 1, 1,?sep='.')???#?使用“.”連接輸出數值,數值間用“.”間隔。輸出結果:192.168.1.1
print("廣州恒大"?+ 43)?????????????#?不能直接使用“+”連接字符串和數值,會報錯。異常信息為:
???????????????????????????????# TypeError: can only concatenate str (not "int") to str
print("廣州恒大"?+?str(43))?#?使用“+”連接字符串和數值時,數值要轉換為字符串。輸出結果:廣州恒大43
print("廣州恒大", 43)??????#?使用“,”連接字符串和數值,字符串和數值用空格分隔。輸出結果:廣州恒大?43
print("%e"?% 120563332111098)?????#?使用操作符"%e"%格式化數值為科學記數法。輸出結果:1.205633e+14
錦囊03 ?輸出變量
字符串、數值型、布爾型、列表、字典等各種變量都可以直接輸出。示例代碼如下:
stra=?'go big or go home'?????#?定義一個字符串變量stra
print(stra)????????????????????#?輸出變量stra的值
運行結果如下:
go big or go home
?
num = 27???????????????????????#?定義一個數值型變量num
print(num)?????????????????????#?輸出變量num的值
運行結果如下:
27
?
stra=?'你若盛開'???????????????#?定義字符串變量stra
strb=?'蝴蝶自來'???????????????#?定義字符串變量strb
print(stra,strb)?????????????#?使用“,”連接變量stra和strb,中間用空格分隔
print(stra +'\n'?+ strb)?????#?使用'\n'連接變量stra和strb,換行分隔
print(stra + strb)????????????#?使用“+”連接變量stra和strb,直接連接無空格
運行結果如下:
你若盛開?蝴蝶自來
你若盛開
蝴蝶自來
你若盛開蝴蝶自來
?
print(stra +'\n'?, strb)?????#?添加'\n'換行后,使用“,”連接的字符串前面仍然有一個空格
運行結果如下:
你若盛開
?蝴蝶自來
?
name = ['楊過','臨安','1224','小龍女']
print(name)
print('--'.join(name))?????????????????#?使用“--”連接列表內數據
print(' '.join(name))??????????????????#?使用空格“?”連接列表內數據
print(''.join(name))???????????????????#?直接連接列表內數據
運行結果如下:
?['楊過', '臨安', '1224', '小龍女']
楊過--臨安--1224--小龍女
楊過?臨安?1224?小龍女
楊過臨安1224小龍女
?
word =?'世界那么大,'
name=?'黃蓉'
how=?'想出去看看!!'
print(word, name, how)???????????????????#?用“,”連接變量,中間用空格分隔
print(word, name, how,sep='.')??????????#?設置間隔符為“,”
print(word, name, how,sep='****')???????#?設置間隔符為“****”
運行結果如下:
世界那么大,?黃蓉?想出去看看!!
世界那么大,.黃蓉.想出去看看!!
世界那么大,****黃蓉****想出去看看!!
?
word = ["南京","蘇州","上海","杭州","寧波"]
for?item?in?word:????????????????????????#?遍歷列表
????print(item)???????????????????????????#?輸出每個列表元素
運行結果如下:
南京
蘇州
上海
杭州
寧波
?
for?item?in?word:????????????????????????#?輸出列表變量的數據到一行
????print(item +?">>",end="")???????????#?元素之間用“>>”連接
運行結果如下:
南京>>蘇州>>上海>>杭州>>寧波>>
?
team="廣州恒大"
points=63
print?(team,points)??????????????????????#?使用“,”可以直接連接字符串變量和數字變量
#?使用“+”連接字符串變量和數值變量前,必須先格式化數字變量為字符串
print?(team +?str(points))
運行結果如下:
廣州恒大?63
廣州恒大63
錦囊04 ?特殊文字、符號、標志輸出
Windows 10提供的表情包(切換到微軟輸入法,再通過快捷鍵〈Ctrl+Shift+B〉可以調出表情包)提供了大量圖標和特殊符號,在PyCharm下可使用大部分表情包,但是在Python自帶的IDE中只能使用部分特殊字符。
在IDLE中,利用Windows 10表情包輸入特殊符號,代碼如下:
輸出結果如圖1所示。
圖1??在IDLE中輸出特殊符號
在PyCharm中,利用Windows 10表情包輸入特殊符號,代碼如下:
輸出結果為:
調用系統提供的字符映射表,也可以在Pycharm下輸出特殊符號和標志。
按win+R鍵(win鍵見圖2),輸入“charmap”,調出字符映射表。單擊想要插入到程序中的特殊字符,特殊符號將放大顯示。如圖3示。記住放大符號旁邊的字符碼。如要輸入
,它的字符碼為0x43,在0x和43之間加入f0(零),即0xf043,然后就可以通過chr函數進行輸出。代碼如下:
print(chr(0xf043))??????????????????????#0xf043是16進制數
輸出結果為:
#直接使用字符集的編碼,輸出多個特殊符號
print(chr(0xf021),chr(0xf035),chr(0xf046),chr(0xf051),chr(0xf067),chr(0xf0e5),chr(0xf0f2))
輸出結果為:
?
for?i?in?range(0xf035,0xf045):?????????????#設置字符集編碼的區間,輸出多個特殊符號
????print(chr(i),end=",")
?
輸出結果為:
?
如果知道十進制字符編碼的值也可以很方便的輸入特殊字符。如要輸入“←”,只要知道該符號的十進制字符編碼“8592”,具體特殊字符編碼十進制對照表如表1、表2所示。編寫代碼:
print(chr(8592))
輸出結果為:←
print([chr(i)?for?i?in?range(8710,8719)])???#?輸出多個特殊字符
表1 ?特殊字符編碼對照表――箭頭符號
特殊符號 | 十進制編碼 | 特殊符號 | 十進制編碼 | 特殊符號 | 十進制編碼 |
← | ← | ↑ | ↑ | → | → |
↓ | ↓ | ? | ↔ | ? | ↵ |
? | ⇐ | ? | ⇑ | ? | ⇒ |
? | ⇓ | ? | ⇔ | ? | ∀ |
?
表2 ?特殊字符編碼對照表――數字符號
特殊符號 | 十進制編碼 | 特殊符號 | 十進制編碼 | 特殊符號 | 十進制編碼 |
? | ∂ | ? | ∃ | ? | ∅ |
? | ∇ | ∈ | ∈ | ? | ∉ |
? | ∋ | ∏ | ∏ | ∑ | − |
? | − | ? | ∗ | √ | √ |
∝ | ∝ | ∞ | ∞ | ∠ | ∠ |
∧ | ⊥ | ∨ | ⊦ | ∩ | ∩ |
∪ | ∪ | ∫ | ∫ | ∴ | ∴ |
~ | ∼ | ? | ≅ | ≈ | ≅ |
≠ | ≠ | ≡ | ≡ | ≤ | ≤ |
≥ | ≥ | ? | ⊂ | ? | ⊃ |
?
錦囊05 ?將多次輸出內容到一行
Python中,print()函數默認輸出結束后以換行結束,即end的默認值是換行符“\n”,打印完會跳到新行。如果打印完成不換行,只需將end設置成其他字符串,如end='\t'?、end=' '或“《”等字符。下面是將數字0~9輸出到一行顯示,代碼如下:
for?x?in?range(0, 10):?????????#?設置輸出內容區間為0~9
?????print(x,?end=' ')??????????#?輸出數字用空格間隔輸出到一行
運行結果如下:
0 1 2 3 4 5 6 7 8 9
?
for?x?in?range(0, 10):?????????#?置輸出內容區間為0~9
?????print(x,?end='+')??????????#?輸出數字用加號連接
print("? = 100")????????????????#?輸出結果和原輸入內容形成計算題
運行結果如下:
0+1+2+3+4+5+6+7+8+9+? = 100
錦囊06 ?指定位數編號輸出
zfill()函數可按指定位數輸出固定位數的數據編號,如將輸入的數字格式化為5位編號輸出,代碼如下:
instr=input('請輸入一個數字:')
print?(instr.zfill(5))????????#?輸出5位數字編號
運行程序,輸入一個數字,將會格式化為5位編號,如圖4所示。
圖4??輸出5位數字編號
如果要循環輸出固定位數的數字編號,該怎么輸出呢?只需使用循環語句,即可方便的輸出,代碼如下:
for i in?range(1,20):???????#?設置輸出區間為1~19
????n=str(i)??????????????????#?將數字轉為字符串
????s = n.zfill(3)???????????#?將格式化的編號賦值給s
????print?(s)?????????????????#?輸出s
運行結果如下:
001
002
003
…
除了zfill()函數,format()函數也可以實現強大的格式化輸出,如:
x=112
instr=input('請輸入一個數字:')
print?(format(instr,'0>5'))????????#?輸出5位數字編號
print?(format(instr,'*>5'))????????#?輸出5位字符串,空位用*填充
print?(format(instr,'>5'))?????????#??輸出5位字符串,空位用空格填充
運行結果如下:
請輸入一個數字:23
00023
***23
?? 23
錦囊07 ?進制輸出
輸出進制數可以采用操作符、進制轉換函數和格式化函數format()來實現。下面通過代碼與注釋介紹應用。
x=112
print("%o"%x)????????????????#?使用操作符輸出八進制數
print("%x"%x)????????????????#?使用操作符輸出十六進制數
print("nHex = %x,nDec = %d,nOct = %o"?%(x,x,x))?#?輸出十六進制、十進制、八進制數
print(bin(x))????????????????#?使用bin()函數輸出二進制數
print(oct(x))????????????????#?使用oct()函數輸出八進制數
print(hex(x))????????????????#?使用hex()函數輸出十六進制數
運行結果如下:
160
70
nHex = 70,nDec = 112,nOct = 160
0b1110000
0o160
0x70
?
x = 112
print("{0:d}".format(x))????????????#?使用format函數輸出十進制數
print("{0:x}".format(x))????????????#?使用format函數輸出十六進制數
print("{0:o}".format(x))????????????#?使用format函數輸出八進制數
print("{0:b}".format(x))????????????#?使用format函數輸出二進制數
print("int: {0:d};? hex: {0:x};? oct: {0:o};? bin: {0:b}".format(x))?#綜合輸出進制數
#?綜合輸出帶符號的各進制數
print("二進制: {0:#b};?八進制: {0:#o} ;十進制: {0:#d};??十六進制: {0:#x}".format(x))
運行結果如下:
112
70
160
1110000
int: 112;? hex: 70;? oct: 160;? bin: 1110000
二進制: 0b1110000;?八進制: 0o160 ;十進制: 112;??十六進制: 0x70
錦囊08 ?輸出彩色文字或背景
在PyCharm下要輸出要輸出彩色,可以在輸出前設置顯示方式,格式為:'\033[顯示方式;前景色;背景色m '。顯示方式,前景色,背景色是可選參數,可以只寫其中的某一個;顯示方式、前景色、背景色如圖7所示。
print('\033[1;31m Stay hungry,Stay foolish!\033[0m')???#?紅色前景色輸出名言
print('\033[1;32;45m?求知若饑,虛心若愚!\033[0m') ??#?綠色前景色輸出名言,背景色為紫色
程序運行結果如圖5所示。
圖5??輸出運行結果
print('go big or go\033[1;35m home \033[0m!')???#?設置文字中home?紫色前景色顯示
#?設置文字中home綠色前景色,黃色背景色顯示
print('go big or go\033[1;32;43m home \033[0m!')
print('\033[1;31;44mgo big or go home \033[0m')??#?設置文字紅色前景色,藍色背景色顯示
程序的運行結果如圖6所示。
圖6??輸出運行結果
說明:在PyCharm下要輸出要輸出彩色,可以在輸出前設置顯示方式,格式為:'\033[顯示方式;前景色;背景色m '。顯示方式,前景色,背景色是可選參數,可以只寫其中的某一個;顯示方式、前景色、背景色如圖7所示。
?????
圖7??顯示方式、前景色與背景色
錦囊09 ?對齊輸出數據
對齊數據可以使用rjust、ljust和center來實現。也可以使用格式化函數format()實現,下面通過代碼和注釋來實現。
team="格林蘭島"
print(team.ljust(10))??????????????#左對齊字符串,用空格號占位
print(team.ljust(10,'*'))??????????#左對齊字符串,用*號占位
print(team.rjust(10,'*'))??????????#右對齊字符串,用*號占位
print(team.rjust(10))??????????????#右對齊字符串,用空格號占位
print(team.center(10))?????????????#中間對齊字符串,用空格號占位
print(team.center(10,'*'))?????????#中間對齊字符串,用*號占位
運行結果如下:
格林蘭島?????
格林蘭島******
******格林蘭島
???? ??格林蘭島
???格林蘭島??
***格林蘭島***
?
s="多特蒙德"
print(format(s,'*>20'))??#?右對齊字符串,“*”為號占位符,“>”為右對齊符號,20寬度
print(format(s,'#<20'))??#?左對齊字符串,“#”為號占位符,“<”為左對齊符號,20寬度
print(format(s,' ^20'))??#?中間對齊字符串,空格“?”為占位符,“^”對齊符號,20寬度
運行結果如下:
****************多特蒙德
多特蒙德################
????????多特蒙德???????
?
car=[ [1,"奔馳",489163],[2,"寶馬",455051] ,[3,"奧迪",445300]]
for?item?in?car:??????????????????????????????????????????#?循環讀取列表數據
????tup='{0:0>3}\t{1:*^12}\t{2:$>12.2f}'????????????????#?設置對其格式和占位符
????print(tup.format(item[0],item[1],float(item[2])))??#?輸出數據未設置格式
運行結果如下:
001??? *****奔馳*****??? $$$489163.00
002??? *****寶馬*****??? $$$455051.00
003??? *****奧迪*****??? $$$445300.00
錦囊10 ?輸出內容到文件
設置參數file為目標文件名稱,即可輸出需要輸出的內容到文件。代碼如下:
fp =?open('mingrisoft.txt','a+')????????????????# 'a+'以讀寫模式打開文件
text="go big or go home"
print(text,file=fp)???????????????????????????????????#?輸出到文件中
fp.close()
執行上面的代碼后,將在程序所在目錄下生成一個名稱為mingrisoft.txt的文件,該文件的內容為文字“go big or go home”。
應用場景
場景一:輸出嵌套列表的數據
對于復雜嵌套列表,如何格式化輸出對應的數據呢?可以利用for循環讀取數據,然后進行格式化處理,即可實現嵌套列表的格式化輸出。代碼如下:
college=['1,哈佛大學,Harvard University,美國,100','2,斯坦福大學,Stanford University,美國,76.5','3,劍橋大學,University of Cambridge,英國,70.9','4,麻省理工學院,Massachusetts Institute of Technology,美國,70.4','5,加州大學-伯克利,University of California Berkeley,美國,69.1']
print("{0:<3}\t{1:<12}\t{2:<31}\t{3:<4}\t{4:<6}".format('排名','中文名稱','英文名稱','國家','分數'))
for?item?in?college:
??? line=item.split(',')
??? tupl =?'{0:0>3}\t{1:<12}\t{2:<38}\t{3:<4}\t{4:>6.2f}'
????print(tupl.format(line[0],line[1],line[2],line[3],float(line[4])))
運行程序,輸出效果如圖8所示。
圖8??顯示方式、前景色、背景色
上面輸出當中,采用了左對齊輸出,輸出時使用制表符“\t”進行對齊。如果要采用中間對齊方式,最會出現對齊效果不佳的情況,這是因為中文字符和英文占據的寬度不同。空格采用中文的空格,可以很好地輸出效果。
chn =?chr(12288)
print(chn)
tupl1='{0:<3}\t{1:'+chn+'^10}\t{2:^30}\t{3:^6}\t{4:^6}'
print(tupl1.format('排名','中文名稱','英文名稱','國家','分數'))
for?item?in?college:
??? line=item.split(',')
??? tupl2 =?'{0:0<3}\t{1:'+chn+'^10}\t{2:^38}\t{3:^6}\t{4:6.2f}'
????print(tupl2.format(line[0],line[1],line[2],line[3],float(line[4])))
運行程序,輸出效果如圖9所示。
圖9??中間對齊方式
場景二:中英文多列對齊輸出
中英文多列對齊輸出德國、法國、英國2018年汽車銷量數據。讀取多個列表的數據,對數據輸出時,如果進行格式化處理,輸出不對齊,影響輸出效果。代碼如下:
gem=[["大眾",643518],["奔馳",319163],["寶馬",265051],["福特",252323],["雪鐵龍",227967],["奧迪",255300]]
fra=[["雪鐵龍", 698985],["雷諾",547704],["大眾",259268],["福特",82633],["寶馬",84931],["奔馳",73254]]
eng=[["福特",254082],["大眾",203150],["雪鐵龍",177298],["奔馳",172238],["寶馬",172048],["奧迪",143739]]
for?item1,item2,item3?in?zip(gem,fra,eng):
????print(item1[0],item1[1],"? ",item2[0],item2[1],"? ",item3[0],item3[1])
運行程序,輸出效果如圖10所示。
圖10??對齊輸出結果
如果數據中包含中文,則輸出的列數據無法排列整齊。使用對齊函數ljust()對數據進行居左對齊顯示,也無法對齊數據。因為中文占據的字符長度與英文不同,此時可以使用制表符’\t’來進行對齊輸出。代碼如下:
for?item1,item2,item3?in?zip(gem,fra,eng):
??? item11 = item1[0].ljust(8)
??? item12 =?str(item1[1]).ljust(8)
??? item21 = item2[0].ljust(8)
??? item22 =?str(item2[1]).ljust(8)
??? item31 = item1[0].ljust(8)
??? item32 =?str(item3[1]).ljust(8)
????print(item11 +"\t",item12+"\t","? ",item21+"\t",item22+"\t","? ",item31+"\t",item32)
運行程序,輸出效果如圖11所示。
圖11??對齊結果輸出
場景三:實現程序主界面
利用print函數,可以輸出程序界面,代碼如下:
print("""\033[1;35m
? ****************************************************************
????????????????????????企業編碼生成系統
? ****************************************************************
????? 1.生成6位數字防偽編碼?(213563型)
????? 2.生成9位系列產品數字防偽編碼(879-335439型)
????? 3.生成25位混合產品序列號(B2R12-N7TE8-9IET2-FE35O-DW2K4型)
????? 4.生成含數據分析功能的防偽編碼(5A61M0583D2)
????? 5.半智能防偽碼自動生成(按指定樣式數量自動生成)
????? 6.企業粉絲防偽碼抽獎
????? 0.退出系統
? ================================================================
??說明:通過數字鍵選擇菜單
? ================================================================
\033[0m""")
運行程序,將輸出如圖12所示的程序運行主菜單。
圖12??設置每行22個字的輸出
場景四:分行輸出K3國際列車的站名
如果字符串過長,希望多行顯示,可以通過切片技術實現多行的輸出,如下代碼,設置width變量的值,即可實現對K3國際列車的站名多行輸出。代碼如下:
k3='北京、張家口南、集寧南、朱日和、二連、扎門烏德、賽音山達、喬伊爾、烏蘭巴托、宗哈拉、達爾汗、蘇赫巴托、多卓爾內、納烏什基、吉達、烏蘭烏德、斯柳江卡、伊爾庫茨克、集馬、尼日涅烏丁斯克、伊蘭斯卡雅、克拉斯諾亞爾斯克、馬林斯克、泰加、新西伯利亞、巴拉賓斯克、鄂木斯克、伊希姆、秋明、斯維爾德洛夫斯克、彼爾姆、巴列集諾、基洛夫、高爾基、弗拉基米爾、莫斯科'
width=22
len1=0
k3line=""
while?len(k3)>width:
?? k3line=k3[0:width]
?? k3=k3[width:len(k3)]
???print(k3line)
print(k3[0:len(k3)])
程序的運行結果如圖13和圖14所示。
圖13??設置每行22個字的輸出
?
圖14??設置每行30個字的輸出
?