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