iT邦幫忙

2

[python] 100天從新手變.... (Day06)

Hello呀,這是一個培養寫程式習慣的練習。
先前有試著每天學習一次線上課程,但學到後面就忘記前面,
自省缺少學習記錄,也沒有養成每天寫程式的習慣。
所以這次換個方式:每日固定的課程加學習記錄整理及分享。
看看是否比較能培養出寫程式的習慣

目前鎖定的練習標的物是 100天從新手到大師
歡迎各位前輩指導!!在此先謝謝了!

1. 心得

  1. 函數(function/ 函式)的定義、應用及呼叫,是很基本且必須的。
    因為可以避免重複性的程式碼,也可以運用於多人寫大專案,
    更重要的是可以呼叫函式庫,來省略許多基本的程式碼定義。
  2. 感謝hitomitanaka 大大的提醒,要留意翻譯上的語句。
    閱讀中國的教學文容易有翻譯上的混淆,
    適時的修正回臺灣習慣的用語或使用英文或許會更合適。

小語

做一個決定,並不難,難的是付諸行動,並且堅持到底

2. 本日學習摘要
Day06 - 函數和模組的使用
函數的作用- 程式碼的壞味道/ 用函數封裝功能模組
定義函數- def語句/ 函數名/ 調用自定義函數
調用函數- Python內置函數/ 導入模組和函數
函數的參數- 默認參數/ 可變參數
函數的返回值- 返回單個值
作用域問題- 局部作用域/ 嵌套作用域/ 全局作用域/ 內置作用域/ 和作用域相關的關鍵字
用模組管理函數- 模組的概念/ 用自定義模組管理函數/ 命名衝突的時候會怎樣(同一個模組和不同的模組)

3. 程式碼

#輸入M和N 計算C(M,N)
#C(M,N) = M! / (N! * (M-N!))

m = int(input('m= '))
n = int(input('n= '))
fm = 1
for num in range (1,m + 1):
    fm *= num
fn = 1
for num in range (1,n + 1):
    fn *=num
fm_n=1
for num in range (1,m - n +1):
    fm_n *= num
print("C(m,n) = %d"  % (fm // fn // fm_n))

1

#定義函數:避免程式重複
#輸入M和N 計算C(M,N) 呼叫函數

def fac(num):
    result = 1
    for n in range (1, num + 1):
        result *= n
    return result

m = int (input("m= "))
n = int (input("n= "))
print("使用函數計算的C(m,n) = %d" % (fac(m) // fac(n) // fac(m-n)))

2

#搖骰子
from random import randint

def roll_dice (n = 2):
    #搖骰子
    total = 0
    for _ in range(n):
        total += randint(1,6)
    return total

def add (a = 0, b = 0, c = 0):
    #三數相加
    return a + b + c
print("搖兩次骰子合:",roll_dice())  #搖兩次骰子(默認值2)
print("搖三次骰子合:",roll_dice(3)) #搖三次骰子
print(add())
print(add(1))
print(add(1,2))
print(add(1,2,3))
print(add(c=50,a=100, b = 200))

3

#可變參數的函數
def add( * args):
    total = 0
    for val in args:
        total += val
    return total

print ( add ())
print ( add ( 1 ))
print ( add ( 1 , 2 ))
print ( add ( 1 , 2 , 3 ))
print ( add ( 1 , 3 , 5 , 7 , 9 ))

4

#練習:最大公因數和最小公倍數的函數
def gcd(x,y):
    #求最大公因數
    (x,y) = (y,x) if x > y else (x,y)
    for factor in range (x,0,-1):
        if x % factor == 0 and y % factor == 0 :
            return factor

def lcm(x,y):
    #求最小公倍數
    return x * y // gcd(x,y)

x = int(input("x="))
y = int(input("y="))
print("最大公因數:",gcd(x,y))
print("最小公倍數:", lcm(x,y))

5

#判斷一個數是不是回文數的函數

def is_palidrome (num):
    #判斷一個數是不是回文數
    temp = num
    total = 0
    while temp > 0 :
        total = total * 10 + temp % 10
        temp //= 10
    return total == num

n = int(input("n= "))
print( is_palidrome(n))

6

#判斷一個數是不是質數的函數
def is_prime (num):
    #判斷一個數是不是質數
    for factor in range (2, int(num ** 0.5) + 1):
        if num % factor == 0:
            return False
        return True if num != 1 else False

n = int(input("判斷質數n= "))
print( is_prime(n))

7

#判斷輸入的正整數是不是回文質數
if __name__ == '__main__':
    num = int (input("請輸入正整數:"))
    if is_palidrome (num) and is_prime(num):
        print ('%d是回文質數' %num)
    else:
        print ('%d不是回文質數' %num)

8

#變量的定義域
def foo():
    b = 'hello'
    #函數內部再定義函數
    def bar():
        c = True
        print(a)
        print(b)
        print(c)
    bar()

if __name__ == '__main__':
    a = 100
    foo()

9

#函數基本架構
def main():
    # Todo: Add your code here
    pass

if __name__ == '__main__':
    main()

參考資料:Day06

國家教育研究院-模組
國家教育研究院-碼

wiki計算機術語對照


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
一級屠豬士
iT邦大師 1 級 ‧ 2020-05-06 21:18:28

模塊是左岸用語.代碼也是左岸用語.這兩個都是沒學問的土翻譯.

skyoffree iT邦新手 5 級 ‧ 2020-05-06 23:41:02 檢舉

感謝大大提醒!!確是看中國的教學容易出現混淆,有查證臺灣教育局的用語如下。
會再依查證結果進行修改!!
謝謝您!

Module:臺灣翻譯為模組
Codes:臺灣翻譯為碼/程式碼

國家教育研究院-模組
國家教育研究院-碼

wiki計算機術語對照

我要留言

立即登入留言