- Python程序設(shè)計(jì)基礎(chǔ)教程(慕課版)
- 薛景 陳景強(qiáng) 朱旻如 龔樂君
- 1876字
- 2019-10-23 16:57:53
2.4 輸入與輸出

輸入與輸出
有些時(shí)候程序會(huì)與用戶交互。例如,希望獲取用戶的輸入內(nèi)容,并向用戶打印出返回的結(jié)果??梢苑謩e通過input()函數(shù)與print()函數(shù)來實(shí)現(xiàn)這一需求。
2.4.1 input()函數(shù)
在程序的執(zhí)行過程中向程序輸入數(shù)據(jù)的過程稱為輸入操作,在Python中使用input()函數(shù)來實(shí)現(xiàn)該功能。例如,編寫一個(gè)程序讓計(jì)算機(jī)能夠記住用戶的名字,就會(huì)用input()函數(shù)提示用戶輸入他的名字,并把用戶的輸入存放在變量中,程序如下。
name=input("請輸入您的名字:")
上述代碼的作用是提示用戶從鍵盤上輸入自己的姓名,input()函數(shù)后面括號中的內(nèi)容是留給用戶的提示信息,它是一個(gè)字符串,所以請用雙引號把它括起來,在執(zhí)行input()函數(shù)時(shí),提示信息將會(huì)打印在屏幕上,然后程序?qū)?huì)暫停,等待用戶的輸入,直到用戶輸入了自己的名字并按下回車鍵,程序才會(huì)繼續(xù)運(yùn)行,input()函數(shù)會(huì)獲得用戶的輸入并將其通過賦值號存放到變量name中。
需要提醒的是,使用input()函數(shù)獲得的數(shù)據(jù)一律都是以字符串類型存放的,哪怕用戶輸入的是一個(gè)數(shù)字,這個(gè)數(shù)字也是以字符串的形式存放在計(jì)算機(jī)中。例如,輸入以下程序代碼。
# 例 2.3 從鍵盤上接收用戶輸入,并進(jìn)行計(jì)算 num=input(" 請輸入一個(gè)數(shù)字:") x=100+float(num) print(x)
這個(gè)程序的功能是獲取用戶從鍵盤上輸入的數(shù)字,然后加上100。當(dāng)程序運(yùn)行到input()函數(shù)時(shí),暫停下來,并提示用戶輸入一個(gè)數(shù)字,輸入完畢后,程序繼續(xù)運(yùn)行,并在下一行中使用float()函數(shù)將用戶輸入的一個(gè)數(shù)字從字符串類型轉(zhuǎn)換成實(shí)數(shù)類型,然后和100相加。讀者可以試著把float函數(shù)去掉,并運(yùn)行程序,觀察Python的報(bào)錯(cuò)信息。
2.4.2 print()函數(shù)
與輸入的功能相似,將程序中的數(shù)據(jù)輸出到屏幕或者是打印機(jī)上的工作,稱為輸出,在Python中,可以使用print()函數(shù)來完成向屏幕輸出的功能。如果想將2.4.1節(jié)中獲取的關(guān)于姓名的信息打印在屏幕上,可以使用如下語句。
>>>print("你好!"+name)
這段代碼的作用是將字符串“你好”和變量name中的內(nèi)容連接在一起,然后通過print()函數(shù)將連接后的字符串輸出到屏幕上。
還可以在使用print()函數(shù)時(shí)指定輸出對象間的分隔符、結(jié)束標(biāo)志符和輸出文件。如果缺省這些參數(shù),則分隔符是空格,結(jié)束標(biāo)志符是換行符,輸出目標(biāo)是顯示器。如果要加入自定義的分隔符和結(jié)束標(biāo)志,則可以使用如下格式。
>>> print(1,2,3,sep="***",end='\n') 1***2***3
2.4.3 格式化字符串

格式化字符串
在處理各種數(shù)據(jù)的過程中,經(jīng)常會(huì)把一系列的數(shù)據(jù)組合到一個(gè)包含各種信息的字符串中,此時(shí),需要使用format,format不僅可以將各類型數(shù)據(jù)組合到字符串中,還可以對數(shù)據(jù)進(jìn)行格式化。
將以下內(nèi)容保存為str_format.py文件,并運(yùn)行程序觀察運(yùn)行結(jié)果。
# 例 2.4 利用format 進(jìn)行字符串的格式化操作 age = 20 name = 'Swaroop' print('{0} was {1} years old when he wrote this book'.format(name, age)) print('Why is {0} playing with that python?'.format(name))
輸出:
Swaroop was 20 years old when he wrote this book Why is Swaroop playing with that python?
可以指定一個(gè)字符串使用某些特定的格式(Specification),在調(diào)用format方法的過程中,將使用預(yù)先定義的格式來修改數(shù)據(jù)輸出時(shí)的樣式。
請注意在Python中使用序號0表示第一個(gè)參數(shù),這意味著索引中的第一位是0,第二位是1,依此類推,所以,此處{0}對應(yīng)的是變量name,它是該格式化方法中的第一個(gè)參數(shù)。與之類似,第二個(gè)格式{1}對應(yīng)的是變量age,它是格式化方法中的第二個(gè)參數(shù)。
雖然,也可以通過字符串的連接運(yùn)算來達(dá)到相同的效果。
name + 'is' +str(age) + 'years old'
但這種實(shí)現(xiàn)方式看起來并不簡單,而且非常容易出錯(cuò)。其次,我們更希望將其他數(shù)據(jù)類型轉(zhuǎn)換至字符串的工作由format方法自動(dòng)完成,而不是如這般需要使用特定的函數(shù)明確轉(zhuǎn)換至字符串。再次,當(dāng)使用format方法時(shí),可以直接改動(dòng)文字而不必與變量打交道。
同時(shí)該表示參數(shù)序號的數(shù)字只是一個(gè)可選選項(xiàng),所以同樣可以寫成以下形式。
# 例 2.5 格式字符串中的參數(shù)序號可以省略 age = 20 name = 'Swaroop' print('{} was {} years old when he wrote this book'.format(name, age)) print('Why is {} playing with that python?'.format(name))
這樣做同樣能得到與前面程序相同的輸出結(jié)果。
python中format方法所做的事情便是將每個(gè)參數(shù)值替換至格式所在的位置。這其中可以有更詳細(xì)的格式。例如:
# 例 2.6 常見的格式化字符串用法舉例 # 對于浮點(diǎn)數(shù) '0.333' 保留小數(shù)點(diǎn)(.) 后三位 print('{0:.3f}'.format(1.0/3)) # 定義'hello'字符串長度為 11,使用下畫線填充文本,并保持文字處于中間位置 print('{0:_^11}'.format('hello')) # 基于關(guān)鍵詞輸出 'Swaroop wrote A Byte of Python' print('{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python'))
輸出:
0.333 ___hello___ Swaroop wrote A Byte of Python
由于正在討論格式問題,所以會(huì)發(fā)現(xiàn)print總是會(huì)以一個(gè)不可見的“換行”字符(\n)結(jié)尾,因此重復(fù)調(diào)用print將會(huì)在相互獨(dú)立的一行中分別打印。如果不希望輸出的字符串以默認(rèn)的換行方式結(jié)尾,可以指定參數(shù)end的內(nèi)容為輸出的字符串加上其他結(jié)尾字符。例如:
print('a', end='') print('b', end='')
輸出結(jié)果如下。
ab
或者通過end指定以空格結(jié)尾。
print('a', end=' ') print('b', end=' ') print('c')
輸出結(jié)果如下。
a b c
2.4.4 續(xù)行符
當(dāng)編寫的程序越來越復(fù)雜時(shí),有時(shí)可能會(huì)在一行中輸入一條很長的語句,為了保證程序的美觀和易讀,可以使用續(xù)行符\將這條很長的語句分別擺放在連續(xù)的多行中。例如:
>>>print("我是一個(gè)程序員,\ 我剛開始學(xué)習(xí)Python")
Python在運(yùn)行這兩條語句時(shí),會(huì)把它們連接在一起當(dāng)作一條完整的語句來執(zhí)行,效果如下。
我是一個(gè)程序員,我剛開始學(xué)習(xí)Python
- JavaScript 從入門到項(xiàng)目實(shí)踐(超值版)
- C語言程序設(shè)計(jì)(第2版)
- aelf區(qū)塊鏈應(yīng)用架構(gòu)指南
- Learn Swift by Building Applications
- 差分進(jìn)化算法及其高維多目標(biāo)優(yōu)化應(yīng)用
- 零基礎(chǔ)輕松學(xué)SQL Server 2016
- Elasticsearch Server(Third Edition)
- SQL Server與JSP動(dòng)態(tài)網(wǎng)站開發(fā)
- HTML5秘籍(第2版)
- Building Wireless Sensor Networks Using Arduino
- Visual Studio Code 權(quán)威指南
- ActionScript 3.0從入門到精通(視頻實(shí)戰(zhàn)版)
- 用Python動(dòng)手學(xué)統(tǒng)計(jì)學(xué)
- 產(chǎn)品架構(gòu)評估原理與方法
- 程序員面試金典(第6版)