2009-11-15 108 views
-4
def short_distance(origins,(x,y),gap): 
for (i,j) in origins.spilt(「 」): 
h=[] 
    h.append(float(math.sqrt ((i-x)*(i-x)+(j-y)*(j-y)))) 
for n in h: 
if not gap < n: 
print 0 
if gap < n : 
print n 
+15

它沒有文檔! :P – 2009-11-15 09:27:14

+1

哈哈。他的意思是,如果你解釋你正在做的事情,以及實際發生的事情,我們會更容易地提供幫助 – 2009-11-15 09:28:14

+0

我們將需要更多的細節。這個函數用於什麼? – 2009-11-15 09:29:15

回答

2
  • 該縮進是錯誤的;在for迴路應縮進比def
  • 錯字更多:origins.spilt(" ")大概應該是origins.split(" ")
2

您的代碼也許是從origins是接近(x, y)找到點。其中有很多錯誤:

  1. 凹陷是錯誤的。
  2. split()方法拼錯了。
  3. split()方法返回扁平列表,而您期待的列表對。

前兩個很容易修復。在不知道origins字符串格式的情況下,我無法確定你想要什麼。有關如何將平面列表轉換爲列表對的解決方案,請參見this question

還要注意的是if語句else條款,所以你可以寫:

if gap < n: 
    print n 
else: 
    print 0 
0
  1. 你需要導入數學
  2. 縮進是錯誤的
  3. 如果起源就像是一個字符串'1,1 2,2 3,3',Origins.split(" ")會給你一個字符串列表["1,1", "2,2", "3,3"]。您需要做一些額外的工作才能將它與for循環一起使用for (i,j) in ...您需要一個元組列表,如[(1,1),(2,2),(3,3)]
  4. math.sqrt已經返回一個浮點數,所以你可以離開它
4

我會寫更類似這樣的代碼。如果您運行代碼,它將報告任何失敗的測試(其中沒有測試)。

import math 

def short_distance(origins, point, gap): 
    """ 
    Describe origins, point, and gap are and what the 
    expected outcome is. 

    Then provide an example that tests the code 
    >>> short_distance('1,2 3,4', (5,6), 1.5) 
    5.65685424949 
    2.82842712475 
    """ 
    origins = parse_origins(origins) 
    distance_to_point = lambda point2: point_distance(point, point2) 
    # what's a better name for h? 
    h = map(distance_to_point, origins) 
    report(h, gap) 

def report(h, gap): 
    """ 
    Take the results of the distances and report on them 
    """ 
    for distance in h: 
     if not (gap < distance): 
      print 0 
     else: 
      print distance 

def point_distance(p1, p2): 
    """ 
    Calculate the distance between two points 

    >>> point_distance((0,0), (1,0)) 
    1.0 

    more than one test here would be good 
    """ 
    x1, y1 = p1 
    x2, y2 = p2 
    return math.sqrt((x1-x2)**2 + (y1-y2)**2) 

def parse_origins(origin_string): 
    """ 
    Parse an origins string. 
    >>> parse_origins('1,2 3,4') 
    ((1.0, 2.0), (3.0, 4.0)) 
    """ 
    points = origin_string.split(' ') 
    return tuple(map(parse_point, points)) 

def parse_point(point_string): 
    """ 
    Take a string like 1,2 and return a tuple of the numbers 
    in that string. 

    >>> parse_point('1,2.0') 
    (1.0, 2.0) 
    """ 
    return tuple(map(float, point_string.split(','))) 

def test(): 
    import doctest 
    doctest.testmod() 

if __name__ == '__main__': 
    test() 
0

下面的代碼:

from math import sqrt 
def short_distance(origins,(x,y),gap): 
    def distance(i, j): 
     ix, iy = i - x, j - y 
     return sqrt (ix*ix + iy*iy) 
    all_distances = (distance(float(i), float(j)) for (i,j) in origins) 
    for n in all_distances: 
     print (0 if gap >= n else n) 

,然後用它是這樣的:

>>> origin = (0, 0) 
>>> points = [(1, 1), (2, 1), (1, 2), (2, 2)] 
>>> gap = 1.5 
>>> short_distance(points, origin, gap) 
0 
2.2360679775 
2.2360679775 
2.82842712475 

我最好的猜測是這樣的你想要做什麼。