官术网_书友最值得收藏!

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
主站蜘蛛池模板: 铜川市| 海宁市| 甘孜县| 苏尼特右旗| 化州市| 阳春市| 南召县| 富阳市| 台湾省| 固阳县| 故城县| 防城港市| 电白县| 繁峙县| 云霄县| 油尖旺区| 广东省| 宁安市| 贡觉县| 怀仁县| 若羌县| 霍林郭勒市| 丹巴县| 都安| 霞浦县| 武穴市| 台南县| 唐海县| 嵊泗县| 丽江市| 河间市| 遂昌县| 涞源县| 正镶白旗| 兴和县| 杭锦旗| 宜兰市| 深水埗区| 格尔木市| 太谷县| 三穗县|