Python:从另一个Fi返回结果

2024-09-29 18:46:12 发布

您现在位置:Python中文网/ 问答频道 /正文

在尝试将带有参数的结果从另一个文件“calcFun”返回到“Main”时遇到问题。我可以输入我所有的x,y,z值,只是在“calcFun”中没有从Calc得到任何东西

print calcFun.Calc(x1Coordinates, x2Coordinates, y1Coordinates, y2Coordinates,
           z1Coordinates, z2Coordinates)

但它告诉我这是没有定义的。你知道吗

Main

import calcFun

calcFun.Header()

doAnother = 'y'
while doAnother.lower() == 'y':

# functions to ask user to enter information to calulate 3 dimensional points
calcFun.GetX1()
calcFun.GetX2()
calcFun.GetY1()
calcFun.GetY2()
calcFun.GetZ1()
calcFun.GetZ2()

print calcFun.Calc(x1Coordinates, x2Coordinates, y1Coordinates, y2Coordinates,
           z1Coordinates, z2Coordinates)

doAnother = raw_input('\nCalulate another? (y/n) ')
print ('Good Bye!')

计算单元

import math

# -----Functions-----

# Header
def Header():
    print "Header"

# X1 Coordinates
def GetX1():
    x1Coordinates = input('Enter x1 Coordinate: Example. 2 ')
    return x1Coordinates

# X2 Coordinates
def GetX2():
    x2Coordinates = input('Enter x2 Coordinate: Example. 5 ')
    return x2Coordinates

# Y1 Coordinates
def GetY1():
    y1Coordinates = input('Enter y1 Coordinates: Example. 5 ')
    return y1Coordinates

# Y2 Coordinates
def GetY2():
    y2Coordinates = input('Enter y2 Coordinates: Example. 4 ')
    return y2Coordinates

# Z1 Coordinates
def GetZ1():
    z1Coordinates = input('Enter z1 Coordinates: Example. 7 ')
    return z1Coordinates

# Z2 Coordinates
def GetZ2():
    z2Coordinates = input('Enter z2 Coordinates: Example. 9 ')
    return z2Coordinates

# Calc Function
    # Calc will take x1Coordinates, x2Coordinates, y1Coordinates,
    # y2Coordinates, z1Coordinates and z2Coordinates as parameters.

def Calc(x1Coordinates, x2Coordinates, y1Coordinates, y2Coordinates,
               z1Coordinates, z2Coordinates):

    # Step 1: x1, x2, y1, y2, z1, z2 to the 2nd power & subtracting them
    x = (x2Coordinates - x1Coordinates)**2
    y = (y2Coordinates - y1Coordinates)**2
    z = (z2Coordinates - z1Coordinates)**2

    # Step 2: Adding x, y, z
    xyzTotal = x + y + z

    # Step 3: Square Rooting xyzTotal
    answer = math.sqrt(xyzTotal)

    # Calc returns summary of calulations
    resultStr = '\nx1 Coordinates: ' + str(x1Coordinates)
    resultStr += '\nx2 Coordinates: ' + str(x2Coordinates)    
    resultStr += '\n\ny1 Coordinates: ' + str(y1Coordinates)
    resultStr += '\ny2 Coordinates: ' + str(y2Coordinates)
    resultStr += '\n\nz1 Coordinates: ' + str(z1Coordinates)
    resultStr += '\nz2 Coordinates: ' + str(z2Coordinates)
    resultStr += '\nAnswer: '+ format(answer,'.2f')
    return resultStr

Tags: inputreturnexampledefcalcentercoordinatesresultstr
2条回答

你没有包括很多关于你的工作的信息主.py,或是回溯信息,所以我在这里猜一下。据我所知,这是你问题的简化版本:

主要

$ cat Main.py
import calcFun
print calcFun.Calc(10, 20)

计算单元

$ cat calcFun.py
def Calc(a, b):
    resultStr = '\na' + str(a)
    resultStr += '\nb' + str(b)
    return resultStr

请注意,运行正常:

$ python Main.py

a10
b20

但是如果我尝试使用变量名'a'和'b'

$ cat Main.py
import calcFun
print calcFun.Calc(a, b)

这将产生您提到的错误,但它与您的其他函数或文件无关,您只是引用不存在的变量(您需要为它们提供一个值):

$ python Main.py
Traceback (most recent call last):
  File "Main.py", line 3, in <module>
    print calcFun.Calc(a, b)
NameError: name 'a' is not defined

这与

$ python -c 'sum([a, b])'

相比

$ python -c 'sum([1, 2])'

另外,通常的python命名约定会将文件命名为'主.py'和'计算_有趣的.py“相反。参见PEP8的相关章节https://www.python.org/dev/peps/pep-0008/#package-and-module-names。你知道吗

改变一下:

calcFun.GetX1()
calcFun.GetX2()
calcFun.GetY1()
calcFun.GetY2()
calcFun.GetZ1()
calcFun.GetZ2()

print calcFun.Calc(x1Coordinates, x2Coordinates, y1Coordinates, y2Coordinates,
           z1Coordinates, z2Coordinates)

收件人:

_x1 = calcFun.GetX1()
_x2 = calcFun.GetX2()
_y1 = calcFun.GetY1()
_y2 = calcFun.GetY2()
_z1 = calcFun.GetZ1()
_z2 = calcFun.GetZ2()

print calcFun.Calc(_x1, _x2, _y1, _y2, _z1, _z2)

然后我建议您仔细阅读python代码是如何被解释的;p 简而言之,您调用函数是为了从用户那里获取变量,但是这些值并没有传递到任何地方。上面的更改将把值保存到变量(x1,x2,…)中,然后将这些变量传递给下面的函数调用。你知道吗

相关问题 更多 >

    热门问题