# 開啟一個新檔案來寫入黑洞X-ray雙星的資訊
file = open('BHXBs.txt', 'w') 
file.write('黑洞X-ray雙星名稱, Mass Function (單位：太陽質量)\n')
file.writelines(['GX 339-4,  %4.2f\n' %(5.8), 'GRS 1915+105, %4.2f\n' %(9.5), 'XTE J1550-564,  %4.2f\n' %(6.9)]) # 格式化字串舊用法
file.close()

# 讀取BHXBs.txt 並印出每一行內容
file = open('BHXBs.txt')
for line in file:
    print(line[:-1])
file.close()

"""
Explanation: Python 基本語法與科學計算套件的使用： Python 基礎(二)
四堂課程大綱

第一堂-Python 基礎(一)：Python 簡介及環境建立、Python程式的編寫及執行、資料型態、基本輸入輸出、流程控制
第二堂-Python 基礎(二)：檔案讀寫、例外處理、函數、模組、物件導向
第三堂-Python科學計算套件(一)：Numpy、Matplotlib 
第四堂-Python科學計算套件(二)：Scipy、Astropy

檔案讀寫
使用<a href="https://docs.python.org/3.4/library/functions.html#open" target="_blank">open()</a>函數開啟檔案，第一個參數為檔名，第二個參數為對該檔案的使用方法：
- 只讀取檔案中的資料(預設): r
- 開啟一個新檔案將資料寫入，若檔案已存在，則會複寫: w
- 將資料累加至所開啟的檔案末端: a
- 讀寫檔案資料: r+
End of explanation
"""


period = input("請輸入雙星軌道周期 (單位為秒，請輸入數字)： ")
period = float(period)
print(period)

"""
Explanation: 例外處理

沒有使用例外處理
End of explanation
"""


try:
    period = input("請輸入雙星軌道周期 (單位為秒，請輸入數字)： ")
    period = float(period)
    print(period)
except:
    print("抓到了，你不是輸入數字!")

"""
Explanation: 使用例外處理
End of explanation
"""


try:
    file = open('NSXBs.txt', 'r')
    print(float('周期'))
except IOError:
    print('檔案不存在，無法開啟！')
except ValueError:
    print('你輸入的資料無法轉成數值！')
else:
    file.close()

"""
Explanation: 針對不同例外情形做處理
End of explanation
"""


import math
print(math.pi)

import numpy as np
print(np.pi)

from astropy.constants import G, M_sun
print(2 * np.pi * G)
print(3 * M_sun)

"""
Explanation: 模組與套件

引入模組、套件的方法
End of explanation
"""


def mass_function(period, radial_velocity):
    """    
    輸入雙星軌道周期及伴星的徑向速度，印出雙星系統的mass function。
    
    Parameters
    ----------------   
    period: 數字
            軌道周期 (單位為 s)。
    radial_velocity: 數字
            伴星的徑向速度 (單位為 m/s)    
    """
    G = 6.67 * 10 ** -11
    print(period / (2 * np.pi * G) * radial_velocity ** 3)

mass_function(144000, 400000)

mass_function?
print(G)

"""
Explanation: 自訂函數

使用關鍵字<a href="https://docs.python.org/3.4/reference/compound_stmts.html#def" target="_blank">def</a>以自訂函數，並用<a href="https://docs.python.org/3.4/tutorial/controlflow.html#tut-docstrings" target="_blank">文件字串(documentation strings)</a>註解函數的使用說明。
End of explanation
"""


def mass_function2(period, radial_velocity):
    """    
    輸入雙星軌道周期及伴星的徑向速度，回傳雙星系統的mass function。
    
    Parameters
    ----------------
    period: 數字
            軌道周期 (單位為 s)。
    radial_velocity: 數字
            伴星的徑向速度 (單位為 m/s)
    
    Returns
    -----------
    result: 數字
            mass function的計算值。    
    """
    G = 6.67 * 10 ** -11
    result = period / (2 * np.pi * G) * radial_velocity ** 3
    return result

 mass_function2(144000, 400000)

"""
Explanation: 使用關鍵字<a href="https://docs.python.org/3.4/reference/simple_stmts.html#return" target="_blank">return</a>回傳函數的結果
End of explanation
"""


def mass_function3(period, radial_velocity = 400000):
    """    
    輸入雙星軌道周期及伴星的徑向速度，回傳雙星系統的mass function。
    
    Parameters
    ----------------
    period: 數字
            軌道周期 (單位為 s)。
    radial_velocity: 數字
            伴星的徑向速度 (單位為 m/s)，預設值為400000。
    
    Returns
    -----------
    result: 數字
            mass function的計算值。    
    """
    G = 6.67 * 10 ** -11
    result = period / (2 * np.pi * G) * radial_velocity ** 3
    return result

 mass_function3(144000)

"""
Explanation: 預設引數值 (<a href="https://docs.python.org/3/faq/programming.html#faq-argument-vs-parameter" target="_blank">參數與引數的差別</a>)
End of explanation
"""


