2018年8月11日 星期六

細菌在大城市裡的流動

大眾交通工具裡的把手每天被數不清的人握過,可以從上面的微生物觀察到什麼?

人類手上的菌落叢樣貌會受到生活習慣的影響而改變,例如自己住或和其他人住、住哪裡或是有無寵物,還有搭乘的交通工具,都會影響身上帶有菌落生態。大眾交通系統因為搭乘的人多,又來自不同的區域,可以說是不同微生物種類的交會和交換場所。香港鐵路系統(Mass Transit Railway, MTR)每天的載客量約四百七十萬人,可以想見能在上面收集到各式各樣來自不同地方的細菌,我們可以從這些不同的微生物上觀察到它們的往來流動嗎?

香港大學由 Gianni Panagiotou 帶領的研究團隊在香港的八個捷運線上各採集了六個把手上的細菌,採集時間包括早上和傍晚的尖峰時段,採集者會握著把手或接觸其表面三十分鐘。這八條路線走的區不一樣,其中一條是連接到中國深圳的。

分析了不同時段和不同路線的細菌後,發現主要的細菌為這四種:Actinobacteria (51.3%), Proteobacteria (26.6%), Firmicutes (11.4%) 和 Bacteroidetes (2.3%),其餘的 8.4% 為少數其他種類。這些採集到的細菌種類中,最主要的菌種為 P. acnes (29.1%)。另外,有趣的發現是 -- 早上的細菌最為多樣化,和那個路線走的區域有關聯性,可以從細菌看出那區的特徵,例如某個路線會出現比較多的土壤類或海洋累細菌。越孤立的鐵路線,其細菌的區域性越明顯。不過到了傍晚的時候,當人口在城市間大量流動之後,手把上的細菌會變成以人類相關的細菌為主,每條路線上的帶有區域性特徵的細菌減少了,而帶有抗藥性(antibiotic resistance genes, ARGs)、臨床上最為廣見的細菌增加了, 其中以往來深圳的那條線為最。來往深圳的那條線帶來大量具有抗藥性的細菌,並且越靠近深圳的路線,其抗藥性細菌的量也越多。另外,抗藥性細菌的多寡和搭乘人口的多寡沒帶太大相關性,而是和其路線來往的地區有關。

(ps. 他們測試的抗生素為 tetracycline 和 vancomycin。)



Article:

Nature Highlights / Transport network’s handrails teem with a mix of microbes during evening rush hour


Paper:

Kang et al, The Environmental Exposures and Inner- and Intercity Traffic Flows of the Metro System May Contribute to the Skin Microbiome and Resistome. Cell Reports (2018)










2018年8月5日 星期日

皰疹病毒和阿茲罕默症的關係

之前有提過,關於阿茲罕默症,有一派的學說認為腦中的 Aβ (amyloid-β) 和 tau 堆積可能是因為病毒或細菌感染所引起的,而最近有兩個發表在 Neuron 的研究顯示了皰疹病毒(herpesviruses)和阿茲罕默症的關聯。其中一個研究分析了過世的病患的大腦後,發現患者的腦裡有兩種皰疹病毒的蹤跡,分別為 HHV-6A 和 HHV-7。Mount Sinai 的研究團隊定序了病患腦部的 DNA 和 RNA 想找到可以作為藥物標靶的東西,在分析了超過一千四百位過世病患腦部不同部位 -- 包括有 superior temporal gyrus (STG), anterior prefrontal cortex (APFC) 和 dorsolateral prefrontal cortex (DLPFC) -- 的檢體後,在腦部的 AFPC 和 STC 發現了皰疹病毒 HHV-6A 的基因 U3/U4 (相似於 HHV-5 的 US22) 和 HHV-7 的 DR1,而且這些病毒似乎會影響人類的基因表現。他們發現 HHV-6A 會抑制 microRNA miR-155 的表現,當他們把老鼠 表現 miR-155 的基因拿掉後,其腦中的 Aβ 堆積會比正常老鼠的多。

他們也比較了阿茲罕默症病患和其他患有神經性疾病的病患做比較,發現只有 AD 病患腦中的 HHV-6A 和 HHV-6 比較高。

HCMV: human cytomegalovirus, aka HHV-5

HHV-6 和 HHV-7 皆屬於皰疹病毒下的 roseoloviruses。HHV-6 有兩種:HHV-6A 和 HHV-6B。HHV-6A 會引發玫瑰疹 (roseola, aka exanthem subitum),通常發生在幼兒身上,症狀是連續幾日的高燒,身上出現大塊紅疹。HHV-7 也會引發玫瑰疹,這兩種病毒很常見,大概有 90% 的成人都有。感染後病毒會潛伏在體內,HHV-6 會潛伏在免疫細胞 monocytes 和骨髓細胞(bone marrow progenitor cells),HHV-7 會潛伏在 T cells。

另一個由哈佛醫學院和 MGH 合作的研究則是測試 Aβ 對皰疹病毒 HSV-1, HHV-6A 和 HHV-6B 的反應,他們認為 Aβ 是免疫系統的一環。在這篇研究中 Aβ oligomers 會結合皰疹病毒的表層膜中的醣蛋白(glycoprotein),使病毒無法繼續活動或感染其他細胞。在神經細胞的實驗中,HHV-1, HHV-6A 和 HHV-6B 會加速 Aβ 的堆積,在感染後的 24 小時內便可觀察到 Aβ 堆積和纖維化(fibrilization),而且 Aβ 可以抵抗 HSV-1 的感染。在老鼠實驗中也出現類似的結果,阿茲罕默的基轉鼠 5XFAD 會在十到十二週大的時候腦中才出現 Aβ 堆積,但是卻在感染 HSV-1 的二十四小時後出現堆積。另外,HSV-1 會使老鼠出現腦炎(encephalitis)的病症,但是感染了 HSV-1 的 5XFAD 老鼠的存活率比感染後的野生鼠高,Aβ 會和 HSV-1 結合避免腦炎發生。HSV-1 的醣蛋白 glycoprotein B (gB) 會和 Aβ 結合,引起 Aβ 的纖維化,使病毒無法進入細胞,不過同時也會增加 Aβ 的堆積。

台灣的一個研究分析健保資料庫裡 2001 年間超過 33000 的病例,比較有無感染到 HSV-1 和得到失智症的比例,和得到 HSV-1 後有無用藥和得到失智症的比例後,發現 HSV-1 的感染使失智的機率增高 2.5 倍。(沒想到這篇文章會找到台灣的研究阿,但我覺得這只是表示兩者間有某種程度上的關聯,並不足以證明 HSV-1 感染會增加失智症的風險。)



Articles:

The Scientist / Herpes Viruses Implicated in Alzheimer’s Disease (June 2018)

NNR / How Herpes and Alzheimer's Disease are Linked (June 2018)

MGH / Amyloid beta protein protects brain from herpes infection by binding to, entrapping viral particles (July 2018)


Papers:

B. Readhead et al., Multi-scale analysis of independent Alzheimer’s cohorts finds disruption of molecular, genetic, and clinical networks by human herpesvirus. Neuron (2018)

W.A. Eimer et al, Alzheimer’s disease-associated β-amyloid is rapidly seeded by herpesviridae to protect against brain infection. Neuron (2018)

NS Tzeng et al, Anti-herpetic Medications and Reduced Risk of Dementia in Patients with Herpes Simplex Virus Infections-a Nationwide, Population-Based Cohort Study in Taiwan. Neurotherapeutics (2018)









2018年7月14日 星期六

Omega-3 和視網膜的關係

對人體有功能的不飽和脂肪酸 omega-3 有三種,分別為植物裡的 ALA (α-linolenic acid),以及動物裡 EPA (eicosapentaenoic acid) 和 DHA (docosahexaenoic acid)。EPA 和 DHA 通常在魚裡,大家應該都知道或是聽過,尤其之前有個廣告好像是「魚肝油加蓋,保護眼睛,鞏固牙齒」的就有出現 DHA 的樣子。(咦,是否不小心洩漏的年紀?那個童星現在都是大人了吧?XD)之前有研究顯示,如果老鼠少了運送 DHA 跨過 BBB (blood-brain barrier) 進入腦部的蛋白質 Mfsd2a,就會引起嚴重的腦部和視網膜問題。

脂肪酸有不少功能,其中一個就是建構細胞膜,細胞膜的構造就是兩層尾對尾的脂肪酸(lipid bilayers),除此之外,它還參與了訊息傳遞(signalling)的功能。DHA 很容易被氧化,氧化後會產生調節訊息傳遞的物質 epoxide。epoxide 會被酵素 sEH (soluble expoide hydrolase) 降解變成 19,20-DHDP (19,20-dihydroxydocosapentaenoic acid),是視網膜裡 DHA 的主要代謝物。

之前的研究顯示,視網膜病變的要角是 VEGF (vascular emdothelial growth factor),這個蛋白質會在低氧的情況下表現,作用在血管內皮細胞(vascular endothelial cells)的接收器上(VEGF receptor),使血管變得脆弱易出血,用抑制 VEGF 的藥物可以使視網膜病變不再惡化,但並非對每個病患都有用,這表示 VEGF 可能並非唯一的致病因子。而這篇研究顯示,sEH 也參與了糖尿病引起的視網膜病變(diabetic retinopathy) [註 1]。

註 1:糖尿病視網膜病變的特徵有周皮細胞(pericytes)減少,無細胞微血管(acellular capillary)增生等等。)

DHA --> epoxide --> 19,20-DHDP

在這個研究裡,科學家讓其中一種神經細胞 Müller glia cells 能夠大量表現 sEH,結果出現了視網膜病變開始的徵兆,包括了 pericytes 的衰變,acellular capillary 增生造成不正常血液運送,血清滲漏出血管到週邊的細網膜組織,最終造成視網膜的血液循環不正常,細網膜出血等等。但是,當用藥物抑制 sEH 的表現或功能的話,可以預防這些症狀的發生,表示 sEH 是造成視網膜病變的因子。研究作者表示,造成病症的原因可能並非是 DHA 或 epoxide 不足,而是因為其代謝物 19,20-DHDP 所造成的。他們接著發現另外有三個蛋白質和病症有關:presenilin 1 (PSEN1) [註 2], vascular endothelial-cadherin (VE-cadherin) 和 neural-cadherin (N-cadherin)。這三個蛋白質皆位於細胞膜中,PSEN1 和 cadherins 會和膽固醇(cholesterol)組合在一起成為細胞膜中的 lipid rafts,cadherins 的功用是把兩個細胞緊密結合。但是當 19,20-DHDP 增加的話,這些蛋白和膽固醇的相互結合會被影響,cadherins 會被內收進細胞中(endocytosed),使得細胞和細胞之間不再密合,並且內皮細胞的滲透度也增加了。

註 2: PSEN1 較為人知的可能是它的突變會導致阿茲罕默症

在老鼠實驗中,他們用了會在四個禮拜後出現高血糖(hyperglycaemia)症狀的糖尿病鼠。他們發現這些老鼠在三個月大的時候,視網膜內的 sEH 量會顯著增加。在六個月大的時候,視網膜裡的 sEH 活動會增加,並且出現視網膜病變的症狀。在一歲大的時候,sEH 的活動更為增加,並且老鼠眼內的 19,20-DHDP 也增加了。如果正常老鼠被餵食高醣、高脂肪連續二十週,出現了高血糖的症狀,但還沒有視網膜病變的情況,其 sEH 的表現量也有增高的現象。不過,在給老鼠 sEH inhibitor t-AUCB 後,19,20-DHDP 的生產量顯著降低了,視網膜病變的症狀也停止了。


重點整理:

- 糖尿病鼠的視網膜裡的 sEH 和 19,20-DHDP 量增加
- sEH 的過量表現會使正常老鼠的視網膜出現糖尿病鼠有的視網膜病變症狀。
- 19,20-DHDP 會影響細胞膜中膽固醇和 PSEN1, N-cadherin 和 VE-cadherin 的結合,造成細胞之間無法密合。
- sEH 的抑制劑可以預防周細胞的衰亡和血管滲透等視網膜病變的症狀。



Article:

Nature / A dark side to omega-3 fatty acids (Dec 2017)


Paper:

Hu et al, Inhibition of soluble epoxide hydrolase prevents diabetic retinopathy. Nature (2017)


Other resources:

NIH / Omega-3 fatty acids










2018年7月7日 星期六

用沙門氏菌來治療癌症

癌細胞可以生存的一個點,就是它們突變後一直增生,而且不會被免疫系統攻擊,因為是自體細胞,而這個研究就是用沙門氏菌去感染癌細胞,讓它能被免疫系統認證,然後攻擊。

要怎麼引發免疫系統去攻擊癌細胞呢?韓國全南大學的學者發現一種水產細菌 Vibrio vulnificus (創傷弧菌) 會引起劇烈的免疫反應。創傷弧菌生存在水中,主要是 18C 以上的海洋,會被甲殼類生物(例如牡蠣或蝦子)吃進去,以此為傳播的媒介,人類吃進帶有創傷弧菌的海產會出現嘔吐或腹瀉等症狀。這個研究改造了對人體較無害的沙門氏菌株 Salmonella typhimurium,讓它能夠製造和分泌 vibrio 的一種蛋白質 FlaB。癌細胞被感染了改造過後的沙門桿菌後,分泌的 FlaB (flagellin B) 會引起免疫系統來攻擊它。他們發現 FlaB 引起的免疫反應是透過 TLR4 (toll-like receptor 4) signaling 來引發免疫細胞 -- 像是 monocytes, macrocyotes 和 neutrophils -- 來消滅癌細胞。他們把改造過後的沙門桿菌打到二十隻長有人類大腸癌(colon cancer)腫瘤的老鼠裡,發現三天後雖然老鼠肝臟、肺和脾臟裡的細菌都被免疫細胞清除了,但是帶有沙門氏菌的腫瘤細胞還在,不過在一百二十天之後,有十一隻老鼠的腫瘤消失了。有趣的是,直接把純化的 FlaB 打入腫瘤並沒有治療的效果,但是如果和無法分泌 FlaB 的沙門氏菌一起打入腫瘤,八隻老鼠中有三隻的腫瘤變小了。

之後,他們把轉移中(metastasizing)的人類大腸癌細胞移植到老鼠身上,然後在給牠們打入改造過後會分泌和不會分泌 FlaB 的沙門氏菌,發現被打入不會分泌 FlaB 沙門氏菌的老鼠在 27 天後,身上的癌細胞已大量轉移到各處了(只打入 PBS 的老鼠有 91 處轉移,打入不會分泌 FlaB 沙門氏菌的則有 26 處出現轉移腫瘤),但是被打入會分泌 FlaB 沙門氏菌的老鼠只有四個轉移後的腫瘤。

他們利用 TLR4 K/O 和 TLR5 K/O 老鼠研究,發現如果沒有 TLR4 的話,帶有 FlaB 的沙門氏菌便沒有療效,表示其引起的免疫反應是透過 TLR4 signaling pathway,細菌無法啟動 monocytoes, macrophages 和 neutrophils 前來攻擊癌細胞,而之後 TLR5 signalling 則會增強免疫細胞抑制腫瘤的反應。

雖說用細菌引起免疫細胞來消滅癌細胞看起來頗有療效,但我覺得只有 55% 的話感覺有點低,另外那 45% 無法消滅腫瘤的原因是什麼呢?



Article:

Science / Scientists turn food poisoning microbe into powerful cancer fighter (2018)


Paper:

JH Zheng et al, Two-step enhanced cancer immunotherapy with engineered Salmonella typhimurium secreting heterologous flagellin. Science Translational Medicine (2017)









2018年6月10日 星期日

降解蛋白質的密碼

不知道大家對 degron 的了解有多少。細胞內的蛋白質經過一段時間後會被降解(degradation),降解的方式有兩種:proteasomal 和 lysosomal。顧名思義,proteasomal 就是被 proteasome 降解,lysosomal 就是被 lysosome 降解。(廢話 XD)

大家可能已經知道的蛋白質被送到 proteasome 降解前,會被 E3 ligase 加一個標籤,就是 ubiquitin。E3 ligase 的輔助蛋白(adaptors)會幫它找到要降解蛋白質,怎麼找呢?就是辨識蛋白質尾端(C-terminus)的幾個氨基酸,那幾個氨基酸就是 degron。而不同的 adaptors 辨識的氨基酸也不同。我會知道 degron 是因為之前的研究,當你在蛋白質後面加上 degron,它就會被降解。如果說你知道 A 蛋白和 B 蛋白的某個片段 interact,你可以在 B 蛋白的那個片段後面加上 degron,利用加惹 degron 的片段去 knock down 蛋白 A。

這篇研究做了一些分析,找出當蛋白質尾端是哪幾個氨基酸時,會被 adaptors 辨識出來,然後讓 E3 ligase 幫它標籤後送去降解。他們分析了兩種 E3 ligase:CRL2 和 CRL4。

CRL2 的其中一個 adaptor KLHDC3 辨識的是最尾端(-1 position)是否為 glycine,還有倒數第二(-2 position)是否為鹼性(basic)氨基酸,像是 arginine (R) 和 lysine (K),也就是說 KLHDC3 辨識的最後兩氨基酸主要為 -RG 和 -KG。另一個 adaptor KLHDC2 辨識的則是 -GG,而 LKHDC10 辨識的是 -WG, -PG 和 -AG。另外,APPBP2 辨識的 -RxxG 不需要在最後,比較常見的是 RxxGx 和 RxxGxx。

他們分析的另一個 E3 ligase Cul4 (CRL4),其 adaptors 辨識的氨基酸又不同。它的 DCAF12 辨識的是 -EE,而它的 TRPC4AP 辨識的是倒數第三個的 arginine (R-3 motif)。

除了以上的規則外,當最後一個氨基酸是 glycine 的時候會被送去降解,但是當倒數第二(-2 position)和第三個(-3 position)氨基酸是酸性(acidic)或是避水性(hydrophobic)的時候,像是 aspartic acid (D), glutamic acid (E), isoleucine (I) 或是 valine (V) 的時候,則會使蛋白質避免掉降解,例如當尾端是 -DG 或是 -EG 的時候。另外,當酸性氨基酸配上 lysine 的時候,也就是 -DK 和 -EK 的時候,也會使蛋白質穩定,避免被降解。

看到這裡,可能會有個疑問,那這樣不是會有一堆蛋白質被降解掉嗎?有趣的是他們分析後發現,大多數的蛋白質尾端都不是 glycine,而且這個現象只出現在 eukaryotic 和病毒的蛋白,細菌的蛋白質尾端是 glycine 明顯多很多,可能是因為細菌並沒有 proteasome。



原論文:

I Koren et al, The Eukaryotic Proteome Is Shaped by E3 Ubiquitin Ligases Targeting C-Terminal Degrons. Cell (2018)









2018年5月28日 星期一

偏頭痛的藥物研發

你有偏頭痛嗎?全世界有約 12% 的人年發生一次偏頭痛,女性發生的機率是男性的三倍,美國的 Migraine Research Foundation 估計美國員工每年因為偏頭痛請的病假共約 113 百萬天。

很久以前偏頭痛被認為是因為血管擴張(dilated)造成血流不正常,因此那時候給的藥都是收縮血管的藥,例如 ergotamine。不過 ergotamine 可能會使血管過度收縮,所以後來改用 triptans,其抑制偏頭痛的效果還可以,吃的人約有五、六成有改善,只是它並非對每個人都有用,且有的人是吃得越多,頭痛反而越頻繁。後來,一連串的 fMRI 研究發現,不正常的血流和偏頭痛似乎沒有關係 XD。之後,科學家試著找其他引發偏頭痛的原因,發現腦神經的電流傳遞如果被阻斷,造成的 cortical spreading depression (CSD) 可能也扮演著重要的角色,因為它會攪亂三叉神經(trigeminal nerve)和三叉血管系統(trigeminovascular system)。

接著,UCSD 的神經學家在研究一個控制體內鈉和鈣的甲狀腺賀爾蒙 calcitonin 的時候,發現同樣的 calcitonin 基因在腦中會製造出不太一樣的蛋白,也就是 alternative gene slicing,這個研究後來發表在 1982 年的 Nature。之後,CGRP (calcitonin gene-related peptide)被發現,其參與了痛覺,也控制血流。後來,瑞典的神經學家發現當偏頭痛發生時,三叉血管系統裡的神經(trigeminovascular nerves)會釋放出 CGRP,使血管擴張,並且會傳導痛覺。這些發現引起藥廠的興趣,德國的 Boehringer Ingelheim 和美國的 Merch 相繼研發抑制 CGRP receptor 的小分子藥物,可惜不是有不好的副作用,就是對肝臟有害。

2004 年開始,有些藥廠試著研發針對 CGRP 的抗體藥,不過後來因為 FDA 對止痛藥在安全上的要求越來越嚴苛,加上市場價值難以估計,範圍廣到從約為二十億美金到五百億美金,於是很多藥廠紛紛退縮。接著來到 2013,之前生技公司 Rinat 研發的抗體藥經過幾番轉手到了另一間生技公司 Teva 手中,此藥被命名為 TEV-38125,目前在臨床二期階段,顯示出來的效果不錯。除了 Teva 之外,另外有 Alder Biopharmaceuticals, Eli Lilly 和 Amgen 研發的抗體藥也在 Phase II,且效果也都不錯,這四間公司在爭第一個拿到 FDA 的認證。

目前的臨床沒發現有什麼嚴重的副作用,不過也有科學家擔心,因為它會抑制血管擴張,如果用在有心血管疾病的患者身上,會不會使病情加重還未可知。


延伸閱讀:關於偏頭痛


Article:

Science / FDA just approved the first drug to prevent migraines. Here’s the story of its discovery—and its limitations

SG Amara et al, Alternative RNA processing in calcitonin gene expression generates mRNAs encoding different polypeptide products. Nature (1982)









2018年5月5日 星期六

Python | 用線上 repl.it 寫程式和一些基礎語言

Python 除了可以用之前介紹的 jupyter notebook 外,也可以線上直接寫:repl.it

repl.it 除了可以讓你線上寫 code 之外,也可以自學。先申請一個帳號,登入後在右上角會出現功能列:learn/teach, student, my repls

點入 learn/teach 後下面就會出現很多線上課程,像是 Python, Javascript 等等,我目前是在試 Auto-Graded Course with Solutions 這個課,主要是教你怎麼寫程式,如果你之前有學過 C++ 之類的可能會比較容易上手。


(點圖可以放大)

如果直接連上上面那個網址,就會出現下面這個 coding 的頁面,最左欄是檔案夾,你可以登入後把你寫的東西存入。中間那欄是寫 code 的地方,寫好後點上面的 "run",就會在最右邊那欄跑出來。

例如你在中間欄打入:

a = int(input())
b = int(input())
print(a + b)

input() 這個功能是接受使用者輸入的東西,下面會解釋。

int() 的功能跟 R 的一樣,是指 integer,把輸入的東西變成數字的整數。str() 則是可以把數字變成 string。

print() 就是顯示出 () 裡面的結果

之前關於 Python 的那篇有簡單介紹一下,有興趣的可以先看那篇。(注意,這兩篇教的都是 Python 3.xx 以上的版本,Python 2.xx 的語法會有點不同。例如在 Python 2.xx 的版本裡,input() 的預設是 integer,但是在 Python 3.xx 裡則是 string,所以在上面的例子裡,a 和 b 需要用 int(input()) 把輸入的東西變成 integer,而在 Python 2.xx 的版本裡的話則不用,直接用 input() 讀出來的就是數字。)

上面寫好的 code 在跑了之後就會呈現在右欄,也就是你輸入的第一個數字會是 a,第二個數字會是 b,然後它會算出 a + b。所以當我輸入 3 和 5 後,它會算出 8,變成下面這樣:

3
5
8

上面的 3 和 5 是我輸入的數字,8 是它算出來的。

在 R 裡面設定一個 variable 是用 <-,例如上面的例子,在 R 裡面可以寫成這樣:

a <- 3
b <- 5
print(a + b)

之前那篇有提過,Python 讀取的資料型態分為三種:string (字), integer (整數), float (有小數點的)。在數字外加 str() 就會把它變成 string。另外,在 print() 的功能裡,在字的外面加上 " " 或是 ' ' 的話,就會把它變成 string。用 int() 功能就會把獨到的東西變成 integer。

上面的程式簡單介紹了 integer,接下來介紹一下 string 會在哪裡用到。如果你想要在使用者輸入自己的名字後,出現歡迎詞 "Hello, xxx!",那要怎麼寫呢?我們來拆解一下句子。

Hello, xxx! 這個句子可以拆成三部分:
"Hello, " 是 string。
"xxx" 是使用者輸入的名字,也就是 input()。
"!" 是 string。

要如何把這三個東西結合在一起變成一個句子顯示出來呢?有兩個方法,一個是用 +,另一個是用  ,

在 Python 裡面,+ 除了有數學的功能,在 print() 裡面還有結合顯示的功能。

所以這個句子要讓它呈現,需要這樣寫:

print("Hello, " + input() + "!")

Hello, ! 因為是 string,所以要用 " " 括起來。注意,"Hello, " 的後面有個空格,它也是 string 的一部份,所以要放進去,如果沒有放進去,逗號的後面就會直接連名字,變成:

Hello,xxx!

如果是用  的話,就是在每組字後面加  , ,而且每組之間會出現空白, 也就是說上面用 + 時需要自己加空格的部分,用  ,  的話就不需要。例如上面的句子用  ,  寫的話,就是這樣:

print("Hello,", input(), "!")

不過,因為每組字中間會出現空格,所以你輸入名字後,出現的會是:

Hello, xxx !

你也可以把使用者輸入的名字指定為一個 variable,例如 name,指令寫成這樣:name = input()

於是,中間欄的程式碼可以這樣寫:

name = input()
print("Hello, " + name + "!")
print("Hello,", name, "!")

跑了程式之後,當你在右邊輸入名字,它就會出現:

Peter
Hello, Peter!
Hello, Peter !

Peter 是你輸入的名字,"Hello, Peter!""Hello, Peter !" 是程式讀取後顯示出來的 greetings,看出用 + 和用  的不同了嗎?

另外,+ 和  除了空格這個部分不一樣外,還有一個就是 + 不同種類的不能相加在一起,也就是說 interger 和 string 不能相加在一起顯示,需要把它們變成同類。用  的話則沒有這個限制。

例如我想要讓使用者輸入自己的名字和年齡後,出現這樣的句子:xxx is ??? years old

我們可以把句子拆成這樣:
"xxx" 是使用者輸入的名字,所以是 input()。
"is" 是 string
"???" 是使用者輸入的年齡,所以是 input()。
"years old" 是 string

跟上面一樣,可以把名字指定為 name,年齡指定為 age。

name = input()
age = input()

然後用 + 來寫的話就是:(注意要自己空格和把數字改為 string)

print(name + " is " + str(age) + " years old")

用  來寫的話則是:

print(name, "is", age, "years old")

除了讓使用者輸入,Python 跟 R 一樣也可以指定 variable,例如我們可以指定 year 為 1990,birthmonth 為 Feb。

year = 1990
birthmonth = "Feb"
print(birthmonth, year)

Feb 是 string 所以要加 " "。上面的程式碼跑出來就會在右欄顯示出:

Feb 1990

把上面的程式碼混在一起,比較完整的打在中間那欄:

name = input()
age = input()
birthmonth = "Feb"
year = 1990

print(name, "was born in", birthmonth, year)
print(name, "is", age, "years old")

print(name + " was born in " + birthmonth + str(year))
print(name + " is " + str(age) + " years old")

把程式碼跑完後,在右欄輸入名字和年齡:Peter, 28

就會出現:

Peter
28
Peter is 28 years old
Peter was born in Feb 1990
Peter is 28 years old
Peter was born in Feb1990

看出用 + 和用  的不同呢嗎?

最後,+ 用在數字是把兩個數字加在一起,但是用在 string 是把兩個字連在一起。咦,這不是上面講過了嗎?下面用數字做例子,解釋一下為什麼要再次提出來讓大家注意。

例如我想要顯示:The sum of a and b is (a + b)

把句子拆開來看就是:(記得要把句子中的空格算進 string 裡面)
"The sum of " 是 string
a 是 input(),是數字。
" and " 是 string
b 是 input(),是數字。
" is " 是 string
a + b 是算出來的結果,是 integer。

因為句子是 string,所以要用 + 的話,需要把裡面數字的部分在 print() 裡面設為 string,於是就會變成這樣:

print("The sum of " + str(a) + " and " + str(b) + " is " + str(a + b))

如果用 , 的話就不需要,可以寫成這樣:

print('The sum of', a, 'and', b, 'is', a+b)

前面說過,Python 3.xx 裡的 input() 預設是 string,所以要把 a 和 b 設為 integer。

a = int(input())
b = int(input())

另外加 c 和 d 沒有設 int() 的做比較:

c = input()
d = input()

跟 R 一樣,可以查 variable 的格式是什麼。在 R 裡面是用 class() 的功能,在 Python 裡是用 type() 。查詢 a, b, c, d 的格式:

print(type(a), type(b), type(c), type(d))

算算看 a + b 和 c + d 不同在哪:

print(a + b)
print(c + d)

+ 和  的功能顯示:The sum of a and b is ....

print("The sum of " + str(a) + " and " + str(b) + " is " + str(a + b))

print('The sum of', a, 'and', b, 'is', a+b)

把上面的程式碼整合,打在中間欄完整的 code 是:

a = int(input())
b = int(input())

c = input()
d = input()

print(type(a), type(b), type(c), type(d))

print(a + b)
print(c + d)

print("The sum of " + str(a) + " and " + str(b) + " is " + str(a + b))

print('The sum of', a, 'and', b, 'is', a+b)

print('The sum of', c, 'and', d, 'is', c+d)

跑程式碼後,在右邊輸入 a, b, c, d 四個數字,例如 3, 4, 5, 6,就會出現:

3
4
5
6
<class int=""> <class int=""> <class str=""> <class str="">
7
56
The sum of 3 and 4 is 7
The sum of 3 and 4 is 7
The sum of 5 and 6 is 56

3, 4, 5, 6 是你輸入的數字,後面幾行是程式算出來的。可以看到 3 和 4 是 integer,5 和 6 是 string,所以 3 + 4 算出來是 7,但是 5 + 6 算出來是 56,因為是兩個 string 連在一起,而不是兩個數字加在一起。


以上,這篇的 Python 介紹就先到這吧。