| # mutation_analysis.py | |
| STOP_CODONS = {"UAA", "UAG", "UGA"} | |
| def classify_mutation(wt_protein: str, mutant_protein: str) -> str: | |
| """ | |
| 依照正確的分子生物學邏輯分類突變型態 | |
| """ | |
| # 1️⃣ Nonsense mutation:出現提前終止 | |
| # (翻譯後蛋白中出現 STOP 或明顯提前終止) | |
| if len(mutant_protein) < len(wt_protein): | |
| # 若是「提前終止」但 reading frame 未被打亂 → nonsense | |
| return "nonsense mutation" | |
| # 2️⃣ Frameshift mutation:reading frame 改變 | |
| # (長度變化且非單一替換) | |
| if len(mutant_protein) != len(wt_protein): | |
| return "frameshift mutation" | |
| # 3️⃣ Missense mutation:長度相同但胺基酸不同 | |
| if wt_protein != mutant_protein: | |
| return "missense mutation" | |
| # 4️⃣ 沒有變化 | |
| return "no mutation" | |