【问题标题】:Passing values through while loop error通过while循环错误传递值
【发布时间】:2013-07-18 07:50:23
【问题描述】:

我在通过 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

我的错误是我不确定如何将站列表中的值传递到 while 循环中,然后继续循环。我尝试使用双重列表理解,即 [0][1] 来传递名称,但它不起作用。将加 1 添加到 L 似乎也不会继续循环。有没有办法将一行中的所有值传递到 while 循环中并对其进行测试。??即传递 Perth.csv 到 Stationlist(L 行,第 1 列),476050 到 Stationlist(L 行,第 2 列)和 7709929 到 Stationlist(L 行,第 3 列)

完成后,重复墨尔本和悉尼的数据

【问题讨论】:

  • 您没有将 L 加一。您将其设置为 +1。正确的语法是 L += 1
  • @andyn 谢谢 :) 我什至没有意识到。我面前的手写代码甚至说 L+= 1 但我还没有转置它。感谢您的帮助

标签: python list parsing while-loop


【解决方案1】:

您的代码中有很多错误/误解:

  • You should 仅对类使用大写名称。事实上,它甚至不适用于 ImportIf 之类的东西(因为它们是语句,需要正确拼写:p)

  • 要访问列表中的元素,请使用 indexing(不是 list comprehension,正如您所解释的那样(这实际上是完全不同的事情))。例如,print stationlist[0][2] 访问列表中的第一项,然后访问子列表中的第三项(记住索引从 0 开始)

  • 如果你想给一个数字加一,你可以使用L += 1(注意符号的顺序)。这与L = L + 1

  • 相同
  • 我认为您误解了功能(尤其是您的半径一)。您需要做的就是radius = 1000。不需要任何功能:)。

  • 其他一些语法/缩进错误。

此处不应使用 while 循环。 for-loop 更好:

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

请注意我如何使用 Python 的索引从列表中获取元素。我们不需要包含该行,因为我们使用了一个 for 循环,它遍历列表中的每个元素。

【讨论】:

  • 感谢您的帮助。我已经做出了你建议的改变。关于代表我草率的大写,半径确实应该是一个变量而不是一个函数。感谢您的帮助
  • 因此,通过用 for 循环替换 while 循环,它更易于使用,而且我不需要搜索列 :) 哇。这将在进一步的编程中很有用:)
  • 我已经应用了更改,但在 deltaEasting =eastingTwo-eastingOne 出现了一个错误,即... 不支持的操作类型 -: 'str' 和 'int' 关于问题是什么/如何解决??
  • @user2598164 看起来eastingTwo 是一个字符串。您可以使用int() 将字符串转换为整数(如果它可以是有效数字)。所以,你可以做deltaEasting = int(eastingTwo) - eastingOne
  • 当然是 :) 谢谢。这也将发生在北向以及正确的?感谢您对您的python wizz的帮助:)!!!顺便说一句,我是新来的。我必须喜欢做任何事情才能说问题已解决或已关闭或其他什么吗??
【解决方案2】:

您应该使用L += 1 来增加索引。但不建议在 Python 中使用。还有Radius = 1000 不需要定义函数。

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

我不明白为什么你剧本中的关键词以大写字母开头。 Python 区分大小写,所以它是错误的。并且不需要globals。

【讨论】:

  • 感谢您的帮助。我也不知道为什么关键词要大写。我会让它们保持一致并将它们全部小写并删除全局变量:) 感谢您的帮助
  • @user2598164 很高兴看到:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 2013-09-21
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多