1、習題 4: 更多的變數和列印 學習目標: 瞭解用戶輸入方法,明白pthon2和Python3之間的用戶輸入的區別。瞭解格式化字元串(format string)的概念,學會如何創建包含變數內容的字元串。使用專門的格式和語法把變數的內容放到字元串里,然後進行格式化的列印輸出。 1.1、用戶輸入 在 ...
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() 函數的使用。