2013-07-19 85 views
2

我在通過while循環傳遞值時遇到了問題。我在下面用一些僞代碼編碼到位,但我不確定如何實現結果,但是我附上了我的代碼以幫助解決問題。通過while循環傳遞值的錯誤部分通過while循環錯誤傳遞值

首先,我的雙值列表如下。這是指名稱,東向,北

Stationlist = [['perth.csv','476050','7709929'],['sydney.csv','473791','7707713'],['melbourne.csv','46576','7691097']] 

這裏是我使用的代碼:

Import math 
global Eastingbase 
global Northingbase 
Eastingbase=476050 
Northingbase= 7709929 

Def calculateDistance (northingOne, eastingOne, northingTwo, eastingTwo): 
    Base =100000 
    deltaEasting = eastingTwo -eastingOne 
    deltaNorthing = northingTwo -northingOne 

    Distance = (deltaEasting**2 + deltaNorthing**2) **0.5 
    If Distance < Base: 
    Return Distance 

Def Radius(): 
1000 

L=0 
while L <= Len(Stationlist): 
    if calculateDistance(Eastingbase, Northingbase, Stationlist(row L, column 2),Stationlist(row L, column 3)) < Radius: 
     Relevantfilename = StationList (row L, column 1) 
     print Relevantfilename 
     L = +1 

我的錯誤是,我不能確定如何從電臺列表中的值傳遞到時循環,然後繼續循環。我曾嘗試使用雙列表理解I.e [0] [1]來傳遞名稱,但它不起作用。對L加入加1似乎不會繼續循環。有沒有辦法將一行中的所有值傳入while循環並進行測試。即將Perth.csv傳遞給Stationlist(行L,第1列),476050到Stationlist(行L,第2列),並將7709929傳遞給Stationlist(行L,第3列)

一旦完成,然後重複墨爾本和悉尼數據

+0

你不會將L遞增1。您將其設置爲+1。正確的語法是L + = 1 – andyn

+0

@andyn謝謝你:)我甚至沒有意識到。我在我面前的手寫代碼甚至說L + = 1,但我沒有轉置它。感謝您的幫助 – user2598164

回答

2

有在你的代碼很多錯誤/誤解:

  • You should只用上課大寫的名字。逸岸,它甚至不會對東西的工作就像ImportIf(因爲它們是報表,並且需要正確拼寫:P)

  • 要訪問的元素列表中,你可以使用索引(不名單理解,你解釋(這實際上是一個完全不同的東西))。例如,print stationlist[0][2]訪問列表中的第一項,然後在子列表中的第三項(請記住,索引從0開始)

  • 如果你想添加一個數字,你做L += 1(注意順序符號)。這與L = L + 1

  • 我認爲你誤解了函數(特別是你的半徑)。所有你需要做的是radius = 1000。沒有功能需要:)。

  • 其他一些語法/縮進錯誤。

這裏不應該使用while循環。一個for循環更好:

for station in stationlist: # Notice the lowercase 
    if calculateDistance(eastingbase, northingbase, station[1], station[2]) < radius: 
     print station[0] 

注意我是如何使用Python的索引獲取某個列表元素。我們不需要包含該行,因爲我們使用的for循環遍歷列表中的每個元素。

+0

感謝您的幫助。我提出了你所做的改變。關於代表我的粗略字母大寫,半徑確實應該是一個變量而不是一個函數。感謝您的幫助 – user2598164

+0

@ user2598164不客氣:)。很高興幫助! – TerryA

+1

所以通過用循環替換while循環更容易使用,我不需要搜索列:)哇。這將在進一步的編程中有很大的用處:) – user2598164

0

您應該使用L += 1來增加索引。但不推薦在Python中使用。並且Radius = 1000也不需要定義一個函數。

for each in Stationlist:  
    if calculateDistance(Eastingbase, Northingbase, each[1], each[2]) < Radius: 
     Relevantfilename = each[0] 
     print Relevantfilename 

而且我不明白爲什麼腳本中的關鍵詞以大寫字母開頭。 Python是區分大小寫的,所以它是錯誤的。並且不需要global

+0

感謝您的幫助。我不知道爲什麼關鍵詞要大寫。我只是讓他們一致,把他們全部小寫,並刪除全局:)感謝您的幫助 – user2598164

+0

@ user2598164很高興看到:) – zhangyangyu