1、習題 5: 更多的變量和打印
學習目標:了解用戶輸入方法,明白pthon2和Python3之間的用戶輸入的區別。了解格式化字符串(format string)的概念,學會如何創建包含變量內容的字符串。使用專門的格式和語法把變量的內容放到字符串里,然后進行格式化的打印輸出。
1.1、用戶輸入
在Python3中通常使用的input() 函數直接和用戶進行交互,用於等待用戶的輸入。
在Python2中通常使用raw_input() 函數來和用戶進行交互,基本上raw_input() = input() (python3中),python2中的input() 函數基本上不用,因為在Python2中input() 函數會檢查用戶輸入的是字符還是變量,舉個栗子:如果之前定義了name的值,那么name為變量,則當我們輸入name的時候,會返回變量name的值,如果之前沒有定義name的值則會直接報錯。
所以:對於用戶輸入,在Python2 中使用raw_input() ,在Python3中使用 input() 即可。
1.2、格式化輸出
python格式化輸出有兩種方式:百分號和format
format的功能要比百分號方式強大,其中format獨有的可以自定義字符填充空白、字符串居中顯示、轉換二進制、整數自動分割、百分比顯示 等功能是百分號方式不能相比的
習題五中的練習代碼是:
#! -*-coding=utf-8 -*-
my_name = "Zed A. shaw"
my_age = 35
my_height = 74
my_weight = 180
my_eyes = "Blue"
my_teeth = "White"
my_hair = "Brown"
print "Let,s talk about %s." % my_name
print "He's %d inches tall." % my_height
print "He's %d pounds heavy." % my_weight
print "Actually that's not too heavy."
print "He's got %s eyes and %s hair." % (my_eyes,my_hair)
print "His teech are usually %s depending on the coffee." % my_teeth
#this line is tricky ,try to get it exactly right
print "If I add %d, %d, and %d I get %d." % (my_age,my_height,my_weight,my_age + my_height + my_weight)
上述代碼的運行結果為:
C:\Python27\python.exe D:/pythoncode/stupid_way_study/demo5/Exer5-1.py
Let,s talk about Zed A. shaw.
He's 74 inches tall.
He's 180 pounds heavy.
Actually that's not too heavy.
He's got Blue eyes and Brown hair.
His teech are usually White depending on the coffee.
If I add 35, 74, and 180 I get 289.
Process finished with exit code 0
從上面的代碼可以了解到,%d 和 %s 都是占位符,顧名思義,就是提前占個位置,后面在用%后面的值來替換該占位符,將值放到正確的位置上。
注意:
- %d: 將整數、浮點數轉換成 十 進制表示,並將其格式化到指定位置
- %s: 獲取傳入對象的__ str __方法的返回值,並將其格式化到指定位置
同理還有%f, %o %g 等占位符。這里就不一一贅述了。
2、加分習題:
- 修改所有的變量名字,把它們前面的
my_
去掉。確認將每一個地方的都改掉,不
只是你使用=
賦值過的地方。 - 試着使用更多的格式化字符。例如 %r 就是是非常有用的一個,它的含義是“不管什
么都打印出來”。 - 在網上搜索所有的 Python 格式化字符。
- 試着使用變量將英寸和磅轉換成厘米和千克。不要直接鍵入答案。使用 Python 的
計算功能來完成。
3、我的答案
3.1、修改所有的變量名字,把它們前面的my_
去掉
#! -*-coding=utf-8 -*-
name = "Zed A. shaw"
age = 35
height = 74
weight = 180
eyes = "Blue"
teeth = "White"
hair = "Brown"
print "Let,s talk about %s." % name
print "He's %d inches tall." % height
print "He's %d pounds heavy." % weight
print "Actually that's not too heavy."
print "He's got %s eyes and %s hair." % (eyes,hair)
print "His teech are usually %s depending on the coffee." % teeth
#this line is tricky ,try to get it exactly right
print "If I add %d, %d, and %d I get %d." % (age,height,weight,age + height + weight)
C:\Python27\python.exe D:/pythoncode/stupid_way_study/demo5/Exer5-2.py
Let,s talk about Zed A. shaw.
He's 74 inches tall.
He's 180 pounds heavy.
Actually that's not too heavy.
He's got Blue eyes and Brown hair.
His teech are usually White depending on the coffee.
If I add 35, 74, and 180 I get 289.
Process finished with exit code 0
上述代碼去掉前面的“my_”, 並未發現問題。
3.2、使用%r 格式化字符
舉個栗子:
%s 和 %r 的用法區別:
其主要區別在於 %r
把原始的信息顯示了出來,如字符串保留了引號,%r 用來做 debug處理,因為因為它會顯示變量的原始數據(raw data),而其它的符號則是用來向用戶顯示輸出的。%s 只是顯示其值。
3.3、Python格式化字符
字符串格式代碼如下:
3.4、試着使用變量將英寸和磅轉換成厘米和千克,然后使用Python計算**
4、課后擴展
4.1、字符串拼接實現格式化輸出
字符換一般用“+”加號進行字符串的拼接,一般情況下,字符串拼接情況下的格式化輸出不常用
#! -*-coding=utf-8 -*-
name = raw_input("name:")
age = raw_input("age:")
job = raw_input("job:")
salary = raw_input("slary:")
person_infomation = '''
----------------'''+ name + '''的個人信息----------------
name:'''+ name +'''
age :'''+ age + '''
job :'''+ job + '''
salary:'''+ salary +'''
'''
print person_infomation
上述代碼的運行結果為:
C:\Python27\python.exe D:/pythoncode/stupid_way_study/demo5/Exer5-4.py
name:kang #手工輸入的信息
age:24
job:doctor
slary:3000
# 打印輸出的信息
----------------kang的個人信息----------------
name:kang
age :24
job :doctor
salary:3000
Process finished with exit code 0
上述代碼就是一個字符串拼接格式化輸出的實例,使用加號進行字符串的拼接,但是一般不建議這么寫,因為在因為拼接的字符串寫法比較差,執行速度慢一般不建議使用,同時需要開辟好幾塊內存,效率低下。
4.2、占位符%s實現格式化輸出
如上面習題5實例代碼,但是還有幾個點需要注意一下:
#! -*-coding=utf-8 -*-
name = raw_input("name:")
age = raw_input("age:")
job = raw_input("job:")
salary = raw_input("slary:")
person_infomation = '''
---------------- %s 的個人信息----------------
name:%s
age :%s
job :%s
salary:%s
''' % (name,name,age,job,salary)
print person_infomation
上述代碼的運行結果為:
C:\Python27\python.exe D:/pythoncode/stupid_way_study/demo5/Exer5-5.py
name:kang
age:34
job:doctor
slary:30000
---------------- kang 的個人信息----------------
name:kang
age :34
job :doctor
salary:30000
Process finished with exit code 0
注意:
上面有幾個占位符那么下面就需要引用幾個變量,數量上要一一對應,不然程序會直接報錯
%s %d %f幫助檢測用戶輸入的數據類型是否是要求的,不是就直接報錯。比如說,我們需要輸入的age為整數,那么如果我們使用%s進行占位,那么我們輸入的值就會自動被認為是字符型,如果我們需要輸入的值為整數型那么需要用%d進行占位。
4.3、用.format實現格式化輸出
相對於占位符%s實現格式化輸出這中方式,format功能更強大,該函數把字符串當成一個模板,通過傳入的參數進行格式化,並且使用大括號‘{}’作為特殊字符代替‘%’。
.format的位置匹配規則:
- 不帶編號,即“{}”
- 帶數字編號,可調換順序,即“{1}”、“{2}”
- 帶關鍵字,即“{a}”、“{tom}”
4.3.1 、不帶編號的情況
首先看第一個,不帶編號的情況,就是按照從前到后的順序依次匹配
#! -*-coding=utf-8 -*-
name = raw_input("name:")
age = raw_input("age:")
job = raw_input("job:")
salary = raw_input("slary:")
person_infomation = '''
---------------- {} 的個人信息----------------
name:{}
age :{}
job :{}
salary:{}
''' .format(name,name,age,job,salary)
print person_infomation
C:\Python27\python.exe D:/pythoncode/stupid_way_study/demo5/Exer5-5.py
name:Jack
age:43
job:teacher
slary:20000
---------------- Jack 的個人信息----------------
name:Jack
age :43
job :teacher
salary:20000
Process finished with exit code 0
上面這個代碼就是運用了.format() 的不帶編號匹配原則,從前到后依次填充format( ) 括號中的值。注意前后順序很重要,不然就會亂序的。
4.3.2、帶數字編號的情況
帶數字的情況是.format大括號{x}中是0-n,使用{0-n}來先進行占位,然后再在下面使用.format引用上面已定義的變量(一,一定義)
4.3.3、帶關鍵字的情況
這里的.format主要是使用多個變量進行占位{_name}然后下面再用.format將定義的變量名和上面已定義的變量進行連接(一,一對應)
#! -*-coding=utf-8 -*-
name = raw_input("name:")
age = raw_input("age:")
job = raw_input("job:")
salary = raw_input("slary:")
person_infomation = '''
---------------- {_name} 的個人信息----------------
name:{_name}
age :{_age}
job :{_job}
salary:{_salary}
''' .format(_name = name,
_age = age,
_job = job,
_salary = salary)
print person_infomation
C:\Python27\python.exe D:/pythoncode/stupid_way_study/demo5/Exer5-6.py
name:kang
age:34
job:teacher
slary:3000
---------------- kang 的個人信息----------------
name:kang
age :34
job :teacher
salary:3000
Process finished with exit code 0
5、習題總結
習題5主要是學習了和用戶交互輸入需要注意的地方,還學習了格式化輸出的各種形式。重點是.format() 函數的使用。