一文帶你搞懂 Python 的輸入輸出
Hey,大家好呀,我是Go進(jìn)階者。
一、為什么要輸入和輸出?
無論是從 一開始的“hello world”,還是前面的各種例子,基本都是些“自說自話”,展示類的代碼片段。只有能夠接收用戶輸入,根據(jù)輸入代碼生成結(jié)果,并輸出到屏幕上展示出來,才算一個(gè)較為完整,簡(jiǎn)單的程序。
二、 input輸入函數(shù)
獲取用戶輸入,保存成一個(gè)字符串。重要的話,說兩遍,input函數(shù)的返回值是一個(gè)字符串類型。哪怕你輸入的是個(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: 18
- print(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è)字符串,用來給用戶進(jìn)行輸入提示。input函數(shù)的返回值賦值給inp這個(gè)變量后,inp里就保存了用戶輸入的值。
type是Python內(nèi)置的函數(shù)之一,非常有用,用于查看對(duì)象的數(shù)據(jù)類型。
第二個(gè)例子, 輸入了年齡18,但age里保存的是一個(gè)“18”的字符串。
第三個(gè)例子,什么都沒輸入,返回的是一個(gè)空字符串。
第四個(gè)例子,有效輸入的前后空白被保留在了返回的字符串中。
從上面例子的展示中,不難發(fā)現(xiàn),input函數(shù)將用戶的輸入原樣不動(dòng)的返回給了變量 ,并包裝成一個(gè)字符串。這肯定是不行的,會(huì)帶來很多問題,所以通常都需要對(duì)用戶輸入進(jìn)行處理和判定。
對(duì)空輸入進(jìn)行處理:
- inp = input("請(qǐng)輸入你的姓名: ")
- if inp == "":
- inp = input("姓名不能為空,請(qǐng)重新輸入: ")
將字符串轉(zhuǎn)換成數(shù)字類型:
- age = input("請(qǐng)輸入你的年齡:")
- age = int(age) # 將字符串轉(zhuǎn)化為整數(shù)
- if age > 18:
- print("你已經(jīng)成年!")
- else:
- print("還沒斷奶?")
去除開頭的空白lstrip,去除結(jié)尾的空白rstrip以及去除兩端的空白strip
- inp = input("請(qǐng)輸入你的姓名: ")
- inp = inp.strip() # strip的用法在字符串?dāng)?shù)據(jù)類型有講述
- print(inp)
判斷輸入的字符類型
前面在將字符串轉(zhuǎn)化為整數(shù)用的是int()函數(shù),這種方式有危險(xiǎn)的,看下面的例子:
- s = "123"
- a = int(s)
- print(a)
- s = "something"
- a = int(s)
對(duì)于形如“123”, “283242”的字符串,轉(zhuǎn)化沒問題,但是對(duì)于包含字符、特殊字符的字符串就沒辦法轉(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)按回車?yán)^續(xù)......") # 在這里程序會(huì)暫停,等待你的回車動(dòng)作
- print("繼續(xù)執(zhí)行程序的后面部分......")
此時(shí)的input函數(shù)不會(huì)將輸入保存下來,只是用作暫停程序動(dòng)作。
三、 print輸入函數(shù)
print函數(shù)用于將內(nèi)容格式化顯示在標(biāo)準(zhǔn)輸出上,主要指的是屏幕顯示器。
print可以接受多個(gè)字符串,字符串類型的變量或者可print的對(duì)象。每個(gè)字符串用逗號(hào)“,”隔開,連成一串輸出。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)的語句,其實(shí)是先計(jì)算a+"a"+b的值,然后再通過print打印它。print()會(huì)自動(dòng)執(zhí)行內(nèi)部的語句,輸出想要的結(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ù)打印?;钣胮rint的參數(shù),可以實(shí)現(xiàn)靈活的打印控制。
- >>> a = "i am"
- >>> b = "student"
- >>> print(a,"a" , b, sep="*")
- i am*a*student #輸出結(jié)果
四、 print格式化輸出
在Python2.6以后,有兩種格式化輸出的方式。
一種就是類似C語言的printf的%百分號(hào)格式化輸出,也是Python最基礎(chǔ)最常用的格式化輸出方式。另一種就是str.format()的方式。
這里 重點(diǎn)講述一下傳統(tǒng)的%百分號(hào)格式化輸出方式,
以下面的語句為例:
- print ("我叫 %s 今年 %d 歲!" % ('小明', 10))
首先構(gòu)造一個(gè)字符串"我叫 %s 今年 %d 歲!",將其中需要用別的變量或值替代的部分,用%百分符加一個(gè)數(shù)據(jù)類型代號(hào),比如%s、%d來代替。然后在字符串的后面用%加一個(gè)同樣數(shù)量變量或值的元組。
也就是前面有多少個(gè)%符號(hào),后面就要提供多少個(gè)參數(shù)值,每個(gè)參數(shù)值之間用逗號(hào)隔開,所有參數(shù)用圓括號(hào)括起來。每個(gè)參數(shù)與前面的%一一對(duì)應(yīng),并且數(shù)據(jù)類型也要能夠合法對(duì)應(yīng)。
這是基本用法,更多的格式見下圖,然后掌握格式的搭配方法。
格式化符號(hào):(圖片來源于百度,侵權(quán)請(qǐng)聯(lián)系刪除)
格式化操作符輔助指令:(圖片來源于百度,侵權(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.97623
- print(s)
- s = "i am %(pp).2f" % {"pp": 123.425556, }
- print(s)
- s = "i am %.2f %%" % 123.425556
- print(s)
需要特別說明的是,如果你想在print中打印一個(gè)%百分符號(hào)本身,那么你需要使用%%,兩個(gè)百分符轉(zhuǎn)義出一個(gè)百分符,也就是print("%%")。
如果你對(duì)print復(fù)雜的格式化控制無愛,對(duì)美觀也沒有要求,那么簡(jiǎn)單傻瓜式的一路用%s作為占位符,是種省事的做法。例如:
- print("%s %s %s %s %s" % (a, b, c, d, e))
五、總結(jié)
本文基于Python基礎(chǔ),介紹了常見的幾種輸入和輸出的幾種方式,通過一個(gè)個(gè)項(xiàng)目的實(shí)際操作,能夠更好的理解輸入和輸出語句的用法。在項(xiàng)目實(shí)踐過程中遇到的難點(diǎn),需要注意的點(diǎn)做了詳細(xì)講解。
希望能夠幫助讀者更好的學(xué)習(xí)Python。我是Go進(jìn)階者,如果覺得還不錯(cuò),記得動(dòng)手點(diǎn)贊一下哈。
本文轉(zhuǎn)載自微信公眾號(hào)「Go語言進(jìn)階學(xué)習(xí)」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Go語言進(jìn)階學(xué)習(xí)公眾號(hào)。