2009-04-12 4 views
0

Cette fonction devrait être de retour 36 mais il renvoie 0. Si je cours à travers la ligne logique en ligne en mode interactif 36. Je reçoisLe code fonctionne à l'échelle mondiale mais pas à l'échelle locale?

code

from math import * 

line = ((2, 5), (4, -1)) 
point = (6, 11) 

def cross(line, point): 
    #reference: http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=geometry1 
    ab = ac = [None, None] 
    ab[0] = line[1][0] - line[0][0] 
    ab[1] = line[1][1] - line[0][1] 
    print ab 
    ac[0] = point[0] - line[0][0] 
    ac[1] = point[1] - line[0][1] 
    print ac 
    step1 = ab[0] * ac[1] 
    print step1 
    step2 = ab[1] * ac[0] 
    print step2 
    step3 = step1 - step2 
    print step3 
    return float(value) 

cross(line, point) 

Sortie

[2, -6] # ab 
[4, 6] #ac 
24  #step 1 (Should be 12) 
24  #step 2 (Should be -24) 
0  #step 3 (Should be 36) 

Selon en mode interactif, cela devrait être le résultat des étapes 1, 2 et 3

>>> ab = [2, -6] 
>>> ac = [4, 6] 
>>> step1 = ab[0] * ac[1] 
>>> step1 
12 
>>> step2 = ab[1] * ac[0] 
>>> step2 
-24 
>>> step3 = step1 - step2 
>>> step3 
36 

(Ce serait génial si quelqu'un peut donner un bon titre)

+0

Quelle est la valeur de la valeur ?! :) – WhatIsHeDoing

+0

Ce serait 'NameError: nom global 'valeur' ​​n'est pas défini' – epochwolf

Répondre

5

Vous avez ab et ac pointant vers la même référence. Changer ceci:

ab = ac = [None, None] 

à ceci:

ab = [None, None] 
ac = [None, None] 
+0

wow ... J'ai essayé de comprendre cela pendant une heure! Que je suis bête. Je blâme trop le C++ dernièrement. – epochwolf

1

Dans la ligne ab = ac = [None, None], vous attribuez la même liste aux variables ab et ac. Lorsque vous en changez une, vous changez l'autre en même temps.

La raison pour laquelle cela fonctionne interactivement, c'est que vous n'initiez pas les listes de la même manière.

Swap la première ligne de votre fonction avec ceci:

ab = [None, None] 
ac = [None, None] 
Questions connexes