# 函式名稱
# 1. 英文/數字/底線的組合
# 2. 名稱第一個字不能是數字
# 3. 不能使用保留字當函式名稱(例: def, if, while, for)
# 4. 英文大小寫有區別
def show_me(name = '無名氏'):
print(f'Hello I\'m {name}')
# 有預設值的參數,其右邊所有的參數都要有預設值
def show_my_info(name = '無名氏', age = 0):
print(f'Hello I\' {name}, I\' {age} years old')
show_me('aaron') # 函式呼叫
show_me('andy') # 函式呼叫
show_me('apple') # 函式呼叫
show_my_info('aaron', 18)
show_my_info('andy', 20)
show_me()
show_my_info()
def test(a, b, c = 0, d = 0, e = 0, f = 0):
print(a, b, c, d, e, f)
test(1, 2, 3, 4, 5)
test(f=1, e=2, d=3, c=4, b=5, a=6)
print('*', end='')
print('*', end='')
print('*', end='')
print()
# 這個函式沒有回傳值
def noReturn(num):
print(num)
a = noReturn(999)
print('noReturn:', a)
def willReturn(num):
return num**2
a = willReturn(3) # 回傳值會給呼叫方
print('willReturn:', a)
# 寫一個函式plus,傳入兩個數字的參數,加總後回傳給呼叫方並顯示出來
def plus(a, b):
return a + b
a = plus(1, 2)
print(a)
# 上面兩行可以寫成 print( plus(1, 2) )
print('-------------------我是分隔線---------------------')
# 一級函式
def one():
print('one')
one() # 函式呼叫
a = one # one函式本身指派給變數a
print('a=', a)
print('-------------------我是分隔線2---------------------')
a()
b = a
b()
def two(name):
print("Hi!", name)
a = two
a('aaron')
c = one() # 函式呼叫
print('c=', c)
# Tuple
t = (1, 2, 3) # 建立tuple
print( type(t) )
print(t[0])
# tuple資料結構無法改變裡面的資料
# del t[0]
def math(a, b):
return a+b, a-b, a*b, a/b
a = math(1, 2)
print(a)
a = (1, 2, 3) # 建立tuple
print(a)
print('a type:', type(a))
b = 1, 2, 3 # 建立tuple
print(b)
print('b type:', type(b))
# 寫一函式demo, 傳入兩個字串,然後回傳,第一個字串在前面以及第二個字串在前面的兩種串接後的結果
def demo(a, b):
return a + b, b + a
result = demo('first', 'second')
print(result)
# 建立tuple
a = (1, 2, 3)
print(a, type(a))
a = 1, 2, 3,
print(a, type(a))
a = 1, 2, 3 # 最後一筆資料可以不加逗號
print(a, type(a))
a = 3
print(a, type(a))
a = 3,
print(a, type(a))
# 打包, 解包
a = 1, 2, 3,
print(a)
print(a[0])
print(a[1])
print(a[2])
a, b, c = a # 把tuple a裡面的三筆資料打散存放到a, b, c三個變數當中
print('a=', a)
print('b=', b)
print('c=', c)
b = 1, 2, 3, 4, 5
a, *b, c = b
print('a=', a)
print('b=', b)
print('c=', c)
# 寫一函式swap, 可以將兩個變數的內容交換
a = 3
b = 'H'
def swap(a, b):
return b, a
a, b = swap(a, b)
print('a=', a)
print('b=', b)
# callable()
def x():
print('I \' x')
x()
showX = x
showX()
print('showX callable=', callable(showX) ) # 如果showX式函式,回得到True, 反之False
print('a callable=', callable(a))
a = [1, 2, 3]
c = sum(a)
print('總合為:', c)
sum = 5 # 把5指派給內建函式sum, 會把原本的sum功能覆蓋掉
print('sum callable=', callable(sum))
if(callable(sum)):
c = sum(a)
del sum # 恢復sum原本的函式功能
print('sum callable=', callable(sum))
if(callable(sum)):
c = sum(a)
print('總合為(part 2):', c)
# 字典
c = {'a': 3, 3: 'PP'}
print( c['a'] )
a = {} # 建立空dict
a = dict() # 建立空dict
print(type(a))
a = set() # 建立空set
print(type(a))
a = list() # 建立空list
a = [] # 建立空list
print(type(a))
a = () # 建立空tuple
a = tuple() # 建立空tuple
print(type(a))
a = {1: 1, '4': 'aa', True: 65, (1, 2): 'tuple', 99: [1, 2, 3], 99: 88} # 常數值才能當key
print(a)
print(a[True])
print(a[(1, 2)])
print(int(True))
# 新增dict資料
a['ok'] = 999
# 修改資料
a[(1, 2)] = 'xxxx'
# 刪除資料
del a['4']
# 刪除不存在資料會發生例外
if '4' in a:
del a['4']
else:
print('\'4\' 這個key不存在')
print(a)
print(a.keys())
print(a.values())
for k in a:
print(k, a[k])
# 寫一個函式count_plus,可以傳入任意個參數,加總後回傳
def count_plus(*num): # 不定長度參數, 參數會以tuple的型態傳入
return sum(num)
print( count_plus(1) )
print( count_plus(1, 2) )
print( count_plus(1, 2, 3) )
print( count_plus() )
def my_data(**data): # 不定長度參數,參數會以dict型態傳入
total = 0
for k in data:
total = total + data[k]
return total
print( my_data(a=1) )
print( my_data(a=1, xx=2) )
class MyClass: # 定義類別
def showMe(self, name): # 方法 method
print(f'Hello! {name}, self.x={self.x}')
def showInfo(self, age):
print(f'I\'m {age} years old, self.x={self.x}, self.y={self.y}')
# 建構式通常用來作事前準備工作
def __init__(self):
self.x = 5 # 建立屬性
self.y = 99 # 建立屬性
print('我是建構式')
def __str__(self):
return f'我裡面有屬性x={self.x}和y={self.y}'
# 建立物件
a = MyClass() # 建立物件 <--- 這裡會呼叫建構式
a.showMe('aaron')
a.showInfo(19)
print(a)
# 學生成績管理系統
# 主功能:
# 1. 管理學生成績
# - 新增學生成績
# - 刪除學生成績
# 2. 查詢學生成績
# - 依學號查詢
# - 查詢全部
#
# (資料存檔,資料讀取)
import csv
# 字典dict
grades = {} # 存放全部資料的字典
def student_system():
while True:
print('-----------------')
print('學生成績管理系統')
print('-----------------')
print('1. 管理學生成績')
print('2. 查詢學生成績')
print('3. 離開')
user_input = input('=> ') # 等待使用者輸入
if user_input == '1':
management()
elif user_input == '2':
query()
else:
break # 離開系統
def management():
while True:
print('-----------------')
print('管理學生成績')
print('-----------------')
print('1. 新增學生成績')
print('2. 刪除學生成績')
print('3. 回主功能表')
user_input = input('=> ') # 等待使用者輸入
if user_input == '1':
add_grade()
elif user_input == '2':
del_grade()
else:
break # 離開管理學生成績
def query():
while True:
print('-----------------')
print('查詢學生成績')
print('-----------------')
print('1. 依姓名查詢')
print('2. 查詢全部')
print('3. 回主功能表')
user_input = input('=> ') # 等待使用者輸入
if user_input == '1':
query_by_no()
elif user_input == '2':
query_all()
else:
break # 離開查詢學生成績
# 新增一筆資料
def add_grade():
name = input('請輸入學生姓名:')
no = input('請輸入學號:')
mandrain = int(input('請輸入國文成績:'))
english = int(input('請輸入英文成績:'))
math = int(input('請輸入數學成績:'))
# 將資料新增到字典
grades[name] = [no, mandrain, english, math]
# 存檔
save()
print('新增完成')
print(grades) # 開發中, 測試用
# 刪除一筆資料(以字典的key來刪除資料)
def del_grade():
name = input('請輸入要刪除的姓名:')
if name in grades:
del grades[name]
# 存檔
save()
print('刪除完成')
else:
print('查無此人')
print(grades) # 開發中, 測試用
# 將全部資料寫入csv檔
def save():
with open('student_system.csv', 'w', encoding='utf-8', newline='') as file:
writer = csv.writer(file)
# 寫入標題
writer.writerow(['姓名', '學號', '國文', '英文', '數學'])
# 寫入資料
for key in grades:
a = [key]
a.extend(grades[key]) # 將dict資料轉成list
writer.writerow(a) # 寫入csv
# 讀取資料
def load():
with open('student_system.csv', 'r', encoding='utf-8') as file:
reader = csv.reader(file)
next(reader) # 跳過第一列不要讀取
for row in reader:
grades[row[0]] = row[1:]
print(grades)
def query_by_no():
name = input('請輸入姓名:')
if name in grades:
print(f'姓名: {name}, 學號: {grades[name][0]}, 國文: {grades[name][1]}, 英文: {grades[name][2]}, 數學: {grades[name][3]}')
else:
print('查無此人')
def query_all():
for name in grades:
print(f'姓名: {name}, 學號: {grades[name][0]}, 國文: {grades[name][1]}, 英文: {grades[name][2]}, 數學: {grades[name][3]}')
# 第一次啟動會沒有存檔可以load, 會產生例外
try:
load()
except FileNotFoundError:
print('全新系統')
student_system()
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up