計(jì)算出兩點(diǎn)之間的距離
日常旁白:本人是一枚生物學(xué)的學(xué)生,由于對(duì)生物信息學(xué)特別感興趣,于是想自學(xué)生物信息學(xué)(新手莫怪)。了解到生物信息學(xué)要有編程基礎(chǔ),尤其是要會(huì)一門編程語(yǔ)言,例如:R語(yǔ)言、Python、Perl等,還要熟悉Linux系統(tǒng),作為生信小白,聽(tīng)說(shuō)Python挺簡(jiǎn)單的,于是就自學(xué)了Python,花了兩天時(shí)間了解了Python的基礎(chǔ)語(yǔ)法后,今天想做個(gè)練習(xí)題試試手(實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)),下面是練習(xí)題:(試題來(lái)源:《PYTHON生物信息學(xué)數(shù)據(jù)管理》)

書(shū)中答案原代碼如下:
from math import *
x1,y1,z1 = 0.1,0.0,-0.7
x2,y2,z2 = 0.5,-1.0,2.7
dx = x1-x2
dy = y1-y2
dz = z1-z2
dsquare = pow(dx,2)+pow(dy,2)+pow(dz,2)
d = sqrt(dsquare)
print(d)
為了將所學(xué)內(nèi)容活用,充分理解思路,特拆分講解。(嫌麻煩的可以直接查看最后的升級(jí)版代碼)
第一步:導(dǎo)入math模塊
from math import *
第二步:獲取兩個(gè)點(diǎn)的坐標(biāo)
①方便隨時(shí)計(jì)算用戶輸入的兩點(diǎn)的坐標(biāo)并計(jì)算出兩個(gè)點(diǎn)之間的距離。特增加了獲取用戶輸入的input()函數(shù)。
#獲取用戶輸入
x1,y1,z1=input("請(qǐng)依次輸入點(diǎn)1縱橫坐標(biāo)的值:",)
x2,y2,z2=input("請(qǐng)依次輸入點(diǎn)2縱橫坐標(biāo)的值:",)
②為了簡(jiǎn)化同時(shí)獲取用戶輸入的點(diǎn)的坐標(biāo)的三個(gè)值,使用了切片功能。split(',')表示以“,”作為分隔符,切割用戶輸入的三個(gè)字符。
x1,y1,z1=input("請(qǐng)依次輸入點(diǎn)1縱橫坐標(biāo)的值:",).split(',')
x2,y2,z2=input("請(qǐng)依次輸入點(diǎn)2縱橫坐標(biāo)的值:",).split(',')
第三步:編寫(xiě)計(jì)算公式
①計(jì)算差值
由于系統(tǒng)默認(rèn)用戶輸入的是字符,所以使用下面的代碼計(jì)算可能會(huì)報(bào)錯(cuò)
dx = x1-x2
dy = y1-y2
dz = z1-z2
因此增加了eval()函數(shù),將字符串轉(zhuǎn)化為數(shù)值,方便下面的計(jì)算,代碼如下:
dx = eval(x1) -eval(x2)
dy = eval(y1) -eval(y2)
dz = eval(z1) -eval(z2)
②計(jì)算公式
計(jì)算公式代碼如下:
dsquare = pow(dx,2)+pow(dy,2)+pow(dz,2)
d = sqrt(dsquare)
第四步:輸出結(jié)果
print(d)
最后將代碼總結(jié)如下:
from math import *
#獲取用戶輸入
x1,y1,z1=input("請(qǐng)依次輸入點(diǎn)1縱橫坐標(biāo)的值:",).split(',')
x2,y2,z2=input("請(qǐng)依次輸入點(diǎn)2縱橫坐標(biāo)的值:",).split(',')
dx = eval(x1) -eval(x2)
dy = eval(y1) -eval(y2)
dz = eval(z1) -eval(z2)
dsquare = pow(dx,2)+pow(dy,2)+pow(dz,2)
d = sqrt(dsquare)
print(d)
雖然這是個(gè)小小的計(jì)算程序,但對(duì)于初學(xué)者的我來(lái)說(shuō)每一次對(duì)原代碼的升級(jí)改造,哪怕是讀懂后的注釋都感覺(jué)是一次進(jìn)步提升,總之代碼雖小,動(dòng)手最重要!希望更多學(xué)習(xí)Python的愛(ài)好者不要像我一樣眼高手低,學(xué)習(xí)編程就是要,思考,敲碼,思考,敲碼,敲碼,再敲碼!