2019年6月25日 星期二

Python 練習-01


# e (數學常數) 歐拉數

歐拉數  e=1+1/1! + 1/2! +......+1/n!
首先要把 n! 先解決

n!= 1x2x3x......xn

先來驗證5!
5!=1x2x3x4x5 = 120


n = 1
for y in range(1,6,1):
    for i in range(1, y + 1):
        n = n * i
    print(f'{i}! = {n}')
    n = 1

#***************執行結果**********************

1! = 1
2! = 2
3! = 6
4! = 24
5! = 120


再來就是將每個階層倒數相加就可以了


n1 = 0
n = 1
for y in range(10, 101, 10):
    for i in range(1, y + 1):
        n = n * i
        n1 = n1 + (1 / n)
    print(f'{i} = {n1 + 1}')
    n1 = 0
    n = 1

#***************執行結果**********************

10 = 2.718281801146385
20 = 2.7182818284590455
30 = 2.7182818284590455
40 = 2.7182818284590455
50 = 2.7182818284590455
60 = 2.7182818284590455
70 = 2.7182818284590455
80 = 2.7182818284590455
90 = 2.7182818284590455
100 = 2.7182818284590455


#求最大公約數
可以使用 輾轉相除法

輾轉相除法就是要尋找最大公約數的兩個數字進行重複除法,直到最後得到餘數為0
下面例子:試找出40和64的最大公約數

64 ÷ 40 = 1 .. 24
40 ÷ 24 = 1 .. 16
24 ÷ 16 = 1 .. 8
16 ÷ 8 = 2 .. 0
得到餘數為0就可以了。最後一個餘數是8,因此40和64的最大公約數就是8。

這時就要用到無窮迴圈,注意break使用時機,避免無法跳出迴圈

m=int(input('請輸入第一個數字: '))
n=int(input('請輸入第二個數字: '))

while True:
    if(m>n):
        if (n==0):
            print(f'最大公約數是 {m}')
            break
        else:
            x=m%n
            m=n
            n=x
    else:
        if(m==0):
            print(f'最大公約數是 {n}')
            break
        else:
             temp=m
             m=n
             n=temp

#***************執行結果**********************

請輸入第一個數字: 16
請輸入第二個數字: 40
最大公約數是 8


求解一元二次方程式



import math

X1=0
X2=0

A=int(input('請輸入 X^2 :'))
B=int(input('請輸入X :'))
C=int(input('請輸入整數 :'))

if(A==0):
    X1=0
    X2=(-1*C)/B
    print(f'X={X2}')
else:
    b=-1*B
    X1=(b+math.sqrt(B*B-(4*A*C)))/(2*A)
    X2=(b-math.sqrt(B*B-(4*A*C)))/(2*A)
    print(f'X={X1} 或是 {X2}')

#***************執行結果**********************

請輸入 X^2 :1
請輸入X :7
請輸入整數 :12
X=-3.0 或是 -4.0


當 b^2-4ac 等於負值時程式會發生錯誤,因為負值無法開根號
避免錯誤可以用下列方式

1. 錯誤訊息處理

當 b^2-4ac 等於負值時程式會發出ValueError錯誤訊息,所以可以用 try 來攔截


    try:
        X1=(b+math.sqrt(B*B-(4*A*C)))/(2*A)
        X2=(b-math.sqrt(B*B-(4*A*C)))/(2*A)
    except ValueError:
        print ('輸入的數值有誤,無法計算,請重新輸入')
    else:
        print(f'X={X1} 或是 {X2}')


2. 邏輯判斷,當 b^2-4ac 等於負值時,就顯示訊息,並重新輸入


while True:
    A=int(input('請輸入 X^2 :'))
    B=int(input('請輸入X :'))
    C=int(input('請輸入整數 :'))
    if ((B*B-(4*A*C))>1):
        break
    else:
        print('輸入的數值有誤,無法計算,請重新輸入')


修改後的完整程式:

import math

X1=0
X2=0
while True:
    A=int(input('請輸入 X^2 :'))
    B=int(input('請輸入X :'))
    C=int(input('請輸入整數 :'))
    if ((B*B-(4*A*C))>1):
        break
    else:
        print('輸入的數值有誤,無法計算,請重新輸入')

if(A==0):
    X1=0
    X2=(-1*C)/B
    print(f'X={X2}')
else:
    b=-1*B
    try:
        X1=(b+math.sqrt(B*B-(4*A*C)))/(2*A)
        X2=(b-math.sqrt(B*B-(4*A*C)))/(2*A)
    except ValueError:
        print ('輸入的數值有誤,無法計算,請重新輸入')
    else:
        print(f'X={X1} 或是 {X2}')


沒有留言: