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__)