2013-07-19 3 views
2

У меня возникли проблемы с передачей значений через цикл while. Ive закодировано ниже с некоторым псевдокодом на месте, но я не уверен, как добиться результата, но я добавил свой код ниже, чтобы помочь, если это возможно. Часть ошибки, в которой передаются значения через цикл whileПередача значений через ошибку цикла

Во-первых, мой двойной список значений приведен ниже. Что касается названия, пищеблок, Northing

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], чтобы передать имя, но оно не будет работать. Кроме того, добавление плюс от 1 до L, похоже, не продолжает цикл. Есть ли способ передать все значения из одной строки в цикл while и протестировать ее. Т.е. передайте Perth.csv в список станций (строка L, столбец 1), 476050 в список станций (строка L, столбец 2) и 7709929 в список станций (строка L, столбец 3)

Как только это будет сделано, повторите для Мельбурна и Сиднея данные

+0

Вы не увеличиваете L на единицу. Вы устанавливаете его на +1. Правильный синтаксис L + = 1 – andyn

+0

@andyn спасибо за это :) Я даже не понял. Мой рукописный код передо мной даже говорит L + = 1, но я не перенес его. Спасибо за вашу помощь – user2598164

ответ

2

Есть много ошибок/неправильные толкования в вашем коде:

  • You should использует только верхние регистр имена для классов. Infact, он не будет работать даже на такие вещи, как Import и If (так как они являются заявления, и должны быть написаны правильно: р)

  • Чтобы получить доступ к элементам в списке, вы используете индексации (не список понимание, как вы интерпретировали (это на самом деле совсем другое дело)). Например, print stationlist[0][2] обращается первый элемент в списке, то третий пункт в подсписка (помните, что индексация начинается с 0)

  • Если вы хотите добавить один к ряду, вы L += 1 (обратите внимание на порядок символы). Это то же самое, что и L = L + 1

  • Я думаю, что вы неправильно понимаете функции (особенно ваш радиус один). Все, что вам нужно сделать, это radius = 1000. Никаких функций не требуется :).

  • Некоторые другие ошибки синтаксиса/отступов.

Цикл while не должен использоваться здесь. для цикла лучше:

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

Обратите внимание, как я использую индексирование Python, чтобы получить элементы из списка.Нам не нужно включать строку, потому что мы используем for-loop, который проходит через каждый элемент в списке.

+0

Спасибо за помощь. Я внес изменения, которые вы предложили. Считайте капитализацию, которая просто неаккуратна от моего имени, и радиус действительно должен быть переменной, а не функцией. Спасибо за помощь – user2598164

+0

@ user2598164 Добро пожаловать :). Рад, что это помогло! – TerryA

+1

поэтому, заменив цикл while циклом for, проще в использовании, и мне не нужно искать столбцы :) wow. Это будет полезно при дальнейшем программировании :) – 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 s не нужны.

+0

Спасибо за помощь. Я не знаю, почему ключевые слова капитализируются. Я просто сделаю их согласованными и поставлю их как все в нижнем регистре и удаляю глобалы :) спасибо за помощь – user2598164

+0

@ user2598164 Рад видеть :) – zhangyangyu

Смежные вопросы