Python程式設計
Lesson 3: 基本輸入與輸出
輔助說明函數
help()
在VSCode 終端機中,輸入python
輸入help(函數名稱),即可查詢某函數的用法
print()函數的用法
格式化輸出函式
print()
print()的3種格式化輸出
book = "程式設計"
print("書名: %s 價格: %5d" % (book, 350))
print(項目 % (參數列))
1.
2. 字串的format()方法
3. f-string (建議使用)
book = "程式設計"
price = 350
print("書名: {} 價格: {}".format(book, price))
# 書名: 程式設計 價格: 350
print(格式字串.format(參數列))
輸出函式基本用法(1/7)
print(項目1, 項目2...., sep=分隔字元, end=結束字元, file=sys.stdout, flush = False)
# 項目1 後都可省略
# sep: 列印項目後的區隔字元, 預設值為一個空格(空白字元)
# end: 列印完畢後自動加上的字元,預設為換行(\n)
# file: 資料輸出位置,預設是sys.stdout,也就是螢幕
# flush: 是否清除資料流緩衝區,預設值:不清除
print("學期成績如下:")
print(1, "程式設計成績:", 80)
print(1, "程式設計成績:", 80, sep="%")
print("小考成績", 60, sep="&", end="")
print("期中成績", 80)
學期成績如下:
1 程式設計成績: 80
1%程式設計成績:%80
小考成績&60期中成績 80
輸出函式
輸出函式基本用法(2/7)
# ch4_1.py
num1 = 222
num2 = 333
num3 = num1 + num2
print("這是數值相加", num3)
str1 = str(num1) + str(num2)
print("強制轉換為字串相加", str1, sep=" $$$ ")
- 重新設計ch3_17.py,第二個輸出資料分隔字元是"$$$"
這是數值相加 555
強制轉換為字串相加 $$$ 222333
輸出函式基本用法(3/7)
# ch4_2.py
num1 = 222
num2 = 333
num3 = num1 + num2
print("這是數值相加", num3, end="\t") # 以Tab鍵值位置分隔2筆資料輸出
str1 = str(num1) + str(num2)
print("強制轉換為字串相加", str1, sep=" $$$ ")
- 重新設計ch4_1.py,兩筆資料同一行輸出,以Tab鍵相隔
這是數值相加 555 強制轉換為字串相加 $$$ 222333
輸出函式參數格式化(4/7)
book = "程式設計"
print("書名: %s 價格: %5d" % (book, 350))
- print()列印項目內,以%可設定格式
參數 | 作用 |
---|---|
%% | 在字串內顯示%號 |
%d | 以整數型別輸出 |
%f | 以浮點數輸出 |
%s | 以字串輸出 |
%e 或 %E | 以科學記號方式輸出 |
print(項目 % (參數列))
項目
運算子
參數列: 變數或數值
輸出函式
輸出函式參數格式化(5/7)
book = "程式設計"
print("書名: %10s 價格: %5d" % (book, 350))
# 5d: 整數共佔5位, 不足5位前面補空白, 超過則全數印出
# 10s: 字串共佔10位, 不足前面補空白, 超過則全數印出
price = 56.6
print('價格為 %8.2f元' % price)
# 8.2f:含小數點共8位,小數點後兩位
- print()列印項目內,以%可設定格式
書名: 程式設計 價格: 350
股價為 56.60元
前有3個空格
前有6個空格
前有2個空格
輸出函式
輸出函式參數格式化(6/7)
# ch4_3.py
score = 90
str1 = "王小明"
count = 1
print("%s你的第 %d 次物理考試成績是 %d" % (str1, count, score))
- 格式化輸出的應用
# ch4_4.py : 另一種寫法
score = 90
str1 = "王小明"
count = 1
formatstr = "%s你的第 %d 次物理考試成績是 %d" # 可將格式字串分開寫
print(formatstr % (str1, count, score))
王小明你的第 1 次物理考試成績是 90
輸出函式參數格式化(7/7)
# ch4_5.py
x = 100
print("100的16進位 = %x\n100的 8進位 = %o" % (x, x))
- 格式化8進位和16進位輸出的應用
# ch4_6.py
x = 10
print("整數%d \n浮點數%f \n字串%s" % (x, x, x))
y = 9.9
print("整數%d \n浮點數%f \n字串%s" % (y, y, y))
整數10
浮點數10.000000
字串10
整數9
浮點數9.900000
字串9.9
100的16進位 = 64
100的 8進位 = 144
- 將整數與浮點數分別以%d, %f, %s格式化,觀察結果
輸出函式最新輸出方式: f-string
Python 3.6版以後,增加f-string的輸出方式
book = "程式設計"
price = 350
print(f"書名: {book:5s} 價格: {price:8.2f}")
# 書名: 程式設計 價格: 350.00
f後面接著雙引號"",此為輸出字串
{}內直接放變數或數值
若要設定格式,則加冒號後,直接設定
輸出函式精準控制輸出(1/4)
- 在控制參數前加上數字,可精準控制輸出位數
參數 | 範例 |
---|---|
%(+|-)nd 註1:n為正整數 註2:n前面可加+或-號 |
%6d: 保留6位,置右對齊 %-5d: 保留5位,置左對齊 %+3d: 保留3位,大於0的值加上+號 |
%(+|-)m.nf 註: m, n皆為正整數 註2:n前面可加+或-號 |
%6.2f: 保留6位(含小數點),小數點後2位,置右 %-8.2f: 保留8位(含小數點), 小數點後2位,置左 |
%(-)ns 註1:n為正整數 註2:n前面可加-號 |
%10s: 保留10位,置右 %-5s: 保留5位,置左 |
輸出函式精準控制輸出(2/4)
# ch4_7.py
x = 100
print("x=/%6d/" % x)
y = 10.5
print("y=/%6.2f/" % y)
s = "Deep"
print("s=/%6s/" % s)
print("以下是保留格數空間不足的實例")
print("x=/%2d/" % x)
print("y=/%3.2f/" % y)
print("s=/%2s/" % s)
- 格式化輸出的應用
x=/ 100/
y=/ 10.50/
s=/ Deep/
以下是保留格數空間不足的實例
x=/100/
y=/10.50/
s=/Deep/
輸出函式精準控制輸出(3/4)
# ch4_8.py
x = 100
print("x=/%-6d/" % x)
y = 10.5
print("y=/%-6.2f/" % y)
s = "Deep"
print("s=/%-6s/" % s)
- 格式化輸出的應用,靠左對齊
x=/100 /
y=/10.50 /
s=/Deep /
# ch4_9.py
x = 10
print("x=/%+6d/" % x)
y = 10.5
print("y=/%+6.2f/" % y)
x=/ +10/
y=/+10.50/
- 格式化輸出的應用,正值資料將會出現+號
輸出函式精準控制輸出(4/4)
# ch4_10.py
print(" 姓名 國文 英文 總分")
print("%3s %4d %4d %4d" % ("洪冰儒", 98, 90, 188))
print("%3s %4d %4d %4d" % ("洪雨星", 96, 95, 191))
print("%3s %4d %4d %4d" % ("洪冰雨", 92, 88, 180))
print("%3s %4d %4d %4d" % ("洪星宇", 93, 97, 190))
- 格式化輸出的應用
輸出函式format()函數 (1/3)
- 字串.format() 函數: 也有相同格式化作用
book = "程式設計"
price = 350
print("書名: {} 價格: {}".format(book, price))
# print("書名: %s 價格: %5d" % (book, price))
print(字串.format(參數列))
字串
format()
參數列: 變數或數值
輸出函式
輸出函式format()函數 (2/3)
- 使用.format() 重新設計ch4_3.py
# ch4_11.py
score = 90
str1 = "王小明"
count = 1
print("{}你的第 {} 次物理考試成績是 {}".format(str1, count, score))
輸出函式
王小明你的第 1 次物理考試成績是 90
- 字串.format() : 字串內以{}代表參數位置
- 參數列對應編號: 從0開始算起
book = "程式設計"
price = 350
print("書名: {0:5s} 價格: {1:8.2f}".format(book, price))
# print("書名: %s 價格: %5d" % (book, price))
0 是 book的編號
:5s 字串格式,佔5個字元
參數列: 編號從0算起
1 是 price的編號
:8.2f 浮點數,8個字元,2位小數
輸出函式
輸出函式format()函數 (3/3)
練習
- 請撰寫一程式,輸入四個單字,然後將這四個單字以欄寬為 10、欄與欄間隔一個空白字元、每列印兩個的方式,先列印向右靠齊,再列印向左靠齊,左右皆以直線 |(Vertical bar)作為邊界。
輸出函式
如何設定欄寬?
如何向左或向右靠齊?
輸出函式輸出至檔案(1/3)
- 讀取檔案前,要先呼叫open()開啟檔案
fname = "test.txt"
fobj = open(fname, mode="r")
print(fobj)
呼叫open()成功後,得到「檔案」物件
D:\Python
<_io.TextIOWrapper name='test.txt' mode='r' encoding='cp950'>
輸出結果
cp950是預設的編碼格式
- open()開啟檔案時,必須設定讀寫模式
若不指定,則為預設模式:mode="r"
mode參數
r | w | a | r+ | w+ | a+ |
---|---|---|---|---|---|
讀取 | 寫入 (覆寫) |
寫入 (附加) |
讀寫 | 讀寫+創建 (覆寫) |
讀寫+創建 (附加) |
fn = 'test.txt' # 設定欲開啟的檔案, 請先新增此一檔案
file_Obj = open(fn) # 用預設mode=r開啟檔案,傳回檔案物件file_Obj
f1 = open('檔案1.txt', mode='a')
f2 = open('檔案2.txt', encoding='utf-8')
f3 = open('檔案3.txt', mode='r+') # 開啟檔案3, 讀寫皆可, 檔案必須存在
f4 = open('檔案4.txt', mode='a+') # 開啟檔案4, 讀寫, 檔案不存在則新建
輸出函式輸出至檔案(2/3)
- open()開啟檔案時,必須設定讀寫模式
# ch4_14.py
fstream1 = open("d:\python\ch4\out1.txt", mode="w") # 取代先前資料
print("Testing for output", file=fstream1)
fstream1.close( )
fstream2 = open("d:\python\ch4\out2.txt", mode="a") # 附加資料後面
print("Testing for output", file=fstream2)
fstream2.close( )
輸出函式輸出至檔案(3/3)
輸入函式基本用法(1/6)
變數 = input(提示字串) # 提示字串可有可無
執行input(), 暫停等待輸入
輸入,按下Enter後,繼續執行
print() 印出輸入的字串
作用: 從「標準輸入」裝置輸入資料標準輸入: 預設為鍵盤
輸入函式
輸入函式基本用法(2/6)
# ch4_15.py
name = input("請輸入姓名:")
engh = input("請輸入成績:")
print("name資料類型是", type(name))
print("engh資料類型是", type(engh))
input() 輸入型態為: 字串
輸入函式
請輸入姓名:Wang
請輸入成績:100
name資料類型是 <class 'str'>
engh資料類型是 <class 'str'>
輸入函式基本用法(3/6)
score = input('輸入數學成績:')
print(score + 10) # 調整分數: 加分10分
# 但 score 為字串,無法與10相加
input() 輸入型態為: 字串
score = input('輸入數學成績:')
print(int(score) + 10) # 調整分數: 加分10分
輸入函式
輸入函式基本用法(4/6)
# ch4_16.py
print("歡迎使用成績輸入系統")
name = input("請輸入姓名:")
engh = input("請輸入英文成績:")
math = input("請輸入數學成績:")
total = int(engh) + int(math)
print("%s 你的總分是 %d" % (name, total))
字串內容經int()函數轉換為整數,才能計算
輸入函式
歡迎使用成績輸入系統
請輸入姓名:Wang
請輸入英文成績:85
請輸入數學成績:95
Wang 你的總分是 180
輸入函式基本用法(5/6)
int(): 強制轉型,字串轉整數
score = input('輸入數學成績:')
print(int(score) + 10) # 調整分數: 加分10分
score = int(input('輸入數學成績:')) # 也可輸入後立即轉換
print(score + 10) # 調整分數: 加分10分
問: ❶❷兩者有何差別?
❶
❷
輸入函式
輸入函式基本用法(6/6)
# ch4_17.py
clastname = input("請輸入中文姓氏:")
cfirstname = input("請輸入中文名字:")
cfullname = clastname + cfirstname
print("%s 歡迎使用本系統" % cfullname)
lastname = input("請輸入英文Last Name:")
firstname = input("請輸入英文First Name:")
fullname = firstname + " " + lastname
print("%s Welcome to SSE System" % fullname)
分別輸入中英文姓氏及姓名,程式會輸出歡迎訊息
輸入函式
請輸入中文姓氏:王
請輸入中文名字:小明
王小明 歡迎使用本系統
請輸入英文Last Name:Wang
請輸入英文First Name:Ming
Ming Wang Welcome to SSE System
練習1
- 問題: 請設計程式輸入身高(公分)、體重(公斤)後,計算出BMI值,並印出。
BMI = 體重 / 身高²
體重單位為公斤、身高單位為公尺
輸入函式
練習2
- 問題: 某公司員工的薪水包含三部分-基本薪資、工作獎金、加班費。請設計程式可以輸入各三部分薪資後,計算其總額
輸入函式
列出所有內建函數: dir()
# 列出所有內建函數
dir(__builtins__)
Python程式設計
By Leuo-Hong Wang
Python程式設計
Lesson 3: 基本輸入與輸出
- 1,200