一文帶你搞懂Python的輸入輸出
回復(fù)“Go語(yǔ)言”即可獲贈(zèng)Python從入門(mén)到進(jìn)階共10本電子書(shū)
Hey,大家好呀,我是Go進(jìn)階者。
一、為什么要輸入和輸出?
無(wú)論是從 ?一開(kāi)始的“hello world”,還是前面的各種例子,基本都是些“自說(shuō)自話(huà)”,展示類(lèi)的代碼片段。只有能夠接收用戶(hù)輸入,根據(jù)輸入代碼生成結(jié)果,并輸出到屏幕上展示出來(lái),才算一個(gè)較為完整,簡(jiǎn)單的程序。
二、 input輸入函數(shù)
獲取用戶(hù)輸入,保存成一個(gè)字符串。重要的話(huà),說(shuō)兩遍,input函數(shù)的返回值是一個(gè)字符串類(lèi)型。哪怕你輸入的是個(gè)數(shù)字1,返回給你的只會(huì)是字符串“1”,而不是整數(shù)1。下面是一些簡(jiǎn)單的展示例子:
#第一個(gè)例子> inp = input("please input your name: ")please input your name: jack> inp'jack'> type(inp)<class 'str'>#第二個(gè)例子age = input("please input your age: ")please input your age: 18print(age)'18'#第三個(gè)例子> type(age)<class 'str'>#第四個(gè)例子> a = input("請(qǐng)輸入一個(gè)字符:")'請(qǐng)輸入一個(gè)字符:前后帶有空白'> a' 前后帶有空白 '
????第一個(gè)例子中,inp = input("please input your name: "),input函數(shù)里可以提供一個(gè)字符串,用來(lái)給用戶(hù)進(jìn)行輸入提示。input函數(shù)的返回值賦值給inp這個(gè)變量后,inp里就保存了用戶(hù)輸入的值。
type是Python內(nèi)置的函數(shù)之一,非常有用,用于查看對(duì)象的數(shù)據(jù)類(lèi)型。
第二個(gè)例子, ?輸入了年齡18,但age里保存的是一個(gè)“18”的字符串。
第三個(gè)例子,什么都沒(méi)輸入,返回的是一個(gè)空字符串。
第四個(gè)例子,有效輸入的前后空白被保留在了返回的字符串中。
從上面例子的展示中,不難發(fā)現(xiàn),input函數(shù)將用戶(hù)的輸入原樣不動(dòng)的返回給了變量 ,并包裝成一個(gè)字符串。這肯定是不行的,會(huì)帶來(lái)很多問(wèn)題,所以通常都需要對(duì)用戶(hù)輸入進(jìn)行處理和判定。
對(duì)空輸入進(jìn)行處理:
inp = input("請(qǐng)輸入你的姓名: ")if inp == "":inp = input("姓名不能為空,請(qǐng)重新輸入: ")
將字符串轉(zhuǎn)換成數(shù)字類(lèi)型:
age = input("請(qǐng)輸入你的年齡:")age = int(age) # 將字符串轉(zhuǎn)化為整數(shù)if age > 18:print("你已經(jīng)成年!")else:print("還沒(méi)斷奶?")
去除開(kāi)頭的空白lstrip,去除結(jié)尾的空白rstrip以及去除兩端的空白strip
inp = input("請(qǐng)輸入你的姓名: ")inp = inp.strip() # strip的用法在字符串?dāng)?shù)據(jù)類(lèi)型有講述print(inp)
判斷輸入的字符類(lèi)型
前面在將字符串轉(zhuǎn)化為整數(shù)用的是int()函數(shù),這種方式有危險(xiǎn)的,看下面的例子:
s = "123"a = int(s)print(a)s = "something"a = int(s)

對(duì)于形如“123”, “283242”的字符串,轉(zhuǎn)化沒(méi)問(wèn)題,但是對(duì)于包含字符、特殊字符的字符串就沒(méi)辦法轉(zhuǎn)化了,會(huì)彈出異常錯(cuò)誤。所以在使用int函數(shù)之前,要先對(duì)輸入進(jìn)行判斷。?
修改一下上面的例子:
age = input("請(qǐng)輸入你的年齡:")if age.isdigit(): # 使用isdigit函數(shù)判斷輸入是否全是數(shù)字格式age = int(age) # 將字符串轉(zhuǎn)化為整數(shù)print("你的年齡是:", age)else:print("輸入不合法!")


input函數(shù)有時(shí)可以巧妙地用于阻塞或暫停程序
print("程序前面部分執(zhí)行完畢......")input("請(qǐng)按回車(chē)?yán)^續(xù)......") # 在這里程序會(huì)暫停,等待你的回車(chē)動(dòng)作print("繼續(xù)執(zhí)行程序的后面部分......")
此時(shí)的input函數(shù)不會(huì)將輸入保存下來(lái),只是用作暫停程序動(dòng)作。
三、 print輸入函數(shù)
print函數(shù)用于將內(nèi)容格式化顯示在標(biāo)準(zhǔn)輸出上,主要指的是屏幕顯示器。
print可以接受多個(gè)字符串,字符串類(lèi)型的變量或者可print的對(duì)象。每個(gè)字符串用逗號(hào)“,”隔開(kāi),連成一串輸出。print會(huì)依次打印每個(gè)字符串,同時(shí),每遇到一個(gè)逗號(hào)“,”就輸出一個(gè)空格。
a = "i am"b = "student"print(a,"a", b)# 自動(dòng)以空格分隔print(a+"a"+b)

????對(duì)于形如print(a+"a"+b)的語(yǔ)句,其實(shí)是先計(jì)算a+"a"+b的值,然后再通過(guò)print打印它。print()會(huì)自動(dòng)執(zhí)行內(nèi)部的語(yǔ)句,輸出想要的結(jié)果。再看一個(gè)例子:
> a = 10> b = 2> print(sum((a, a*b))) # 先求a*b,再求和,再打印30 #結(jié)果
?看一下print函數(shù)的原型:print(self, *args, sep=' ', end='\n', file=None)
sep參數(shù): 分隔的符號(hào),默認(rèn)是一個(gè)空格;
end參數(shù): 打印后的結(jié)束方式,默認(rèn)為換行符\n。如果,設(shè)置end='',則可以不換行,讓print在一行內(nèi)連續(xù)打印。活用print的參數(shù),可以實(shí)現(xiàn)靈活的打印控制。
> a = "i am"> b = "student"> print(a,"a" , b, sep="*")i am*a*student #輸出結(jié)果
四、 print格式化輸出
在Python2.6以后,有兩種格式化輸出的方式。
一種就是類(lèi)似C語(yǔ)言的printf的%百分號(hào)格式化輸出,也是Python最基礎(chǔ)最常用的格式化輸出方式。另一種就是str.format()的方式。
這里 ?重點(diǎn)講述一下傳統(tǒng)的%百分號(hào)格式化輸出方式,
以下面的語(yǔ)句為例:
print ("我叫 %s 今年 %d 歲!" % ('小明', 10))首先構(gòu)造一個(gè)字符串"我叫 %s 今年 %d 歲!",將其中需要用別的變量或值替代的部分,用%百分符加一個(gè)數(shù)據(jù)類(lèi)型代號(hào),比如%s、%d來(lái)代替。然后在字符串的后面用%加一個(gè)同樣數(shù)量變量或值的元組。
也就是前面有多少個(gè)%符號(hào),后面就要提供多少個(gè)參數(shù)值,每個(gè)參數(shù)值之間用逗號(hào)隔開(kāi),所有參數(shù)用圓括號(hào)括起來(lái)。每個(gè)參數(shù)與前面的%一一對(duì)應(yīng),并且數(shù)據(jù)類(lèi)型也要能夠合法對(duì)應(yīng)。
這是基本用法,更多的格式見(jiàn)下圖,然后掌握格式的搭配方法。
格式化符號(hào):(圖片來(lái)源于百度,侵權(quán)請(qǐng)聯(lián)系刪除)

格式化操作符輔助指令:(圖片來(lái)源于百度,侵權(quán)請(qǐng)聯(lián)系刪除)

經(jīng)典案例:
s = "i am %s" % "jack"print(s)s = "i am %s age %d" % ("jack", 18)print(s)s = "i am %(name)s age %(age)d" % {"name": "jack", "age": 18}print(s)s = "percent %.2f" % 99.97623print(s)s = "i am %(pp).2f" % {"pp": 123.425556, }print(s)s = "i am %.2f %%" % 123.425556print(s)

????需要特別說(shuō)明的是,如果你想在print中打印一個(gè)%百分符號(hào)本身,那么你需要使用%%,兩個(gè)百分符轉(zhuǎn)義出一個(gè)百分符,也就是print("%%")。
????如果你對(duì)print復(fù)雜的格式化控制無(wú)愛(ài),對(duì)美觀也沒(méi)有要求,那么簡(jiǎn)單傻瓜式的一路用%s作為占位符,是種省事的做法。例如:
print("%s %s %s %s %s" % (a, b, c, d, e))五、總結(jié)
????本文基于Python基礎(chǔ),介紹了常見(jiàn)的幾種輸入和輸出的幾種方式,通過(guò)一個(gè)個(gè)項(xiàng)目的實(shí)際操作,能夠更好的理解輸入和輸出語(yǔ)句的用法。在項(xiàng)目實(shí)踐過(guò)程中遇到的難點(diǎn),需要注意的點(diǎn)做了詳細(xì)講解。
????希望能夠幫助讀者更好的學(xué)習(xí)Python。我是Go進(jìn)階者,如果覺(jué)得還不錯(cuò),記得動(dòng)手點(diǎn)贊一下哈。感謝你的觀看!
-------------------?End?-------------------
歡迎大家點(diǎn)贊,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群】
萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行
