基本功能帮助-Python - python

我对Python还是很陌生,我正忙于弄清楚这些讨厌的函数是如何工作的。我正在编写的程序应该可以计算出三角形的面积,但实际上我无法它可以将局部变量返回给其他函数。任何帮助将不胜感激!

# Area of a triangle

base = 0
height = 0
area = 0

def inData():
    base = float(raw_input("Base:"))
    height = float(raw_input("Height:"))
    return base
    return height

def triangle(b,h):
    area = b / 2 * h
    return area

if __name__ == '__main__':
    inData()
    triangle(base, height)
    print "The area of a triangle of base", base, "and height" , height, "will be", area

python大神给出的解决方案

我在您的代码中看到很多问题和误解;让我看看我是否可以从头开始,并尝试传达为您完成这些功能的正确方法。最后,我们将提供您的代码的有效版本。 🙂

注意:您不必在Python中提前声明函数-它本身就是这样做的!因此,不需要顶部的base, height, area

功能

简而言之,功能是捆绑在一起运行的命令集。你知道这个。不过,您缺少的是参数和参数以及return vs print的概念。

参数与参数
定义功能时,您将设置自己想要的功能,以备将来使用。就像数学中的任何函数f(x)一样,您需要一个方程式,该方程式可以与您提供的任何输入配合使用。对于f(x)x是您的输入。

在编程中,这称为参数。因此,当您使用Python编写代码时:

def Function(x):
    y = x*x
    return y

您已将x定义为参数。现在,“参数”是您放入函数中的参数值。在代数中,适用的想法是定义一个变量。知道这一点后,当您实际使用该功能时:

Function(2)

您将得到4,因为您说的是run Function(x) where x = 2

这是参数与参数的概念。这非常有用,因为您并不总是希望在功能内部要求用户输入。您的功能越直接,它所能做的就越少。例如,有时您想使用相同的函数在后台进行数学运算。如果您不希望raw_input()进程在后台独立运行,可以吗?

这是“参数与参数”的真实值。

退货还是打印

与不使用raw_input()相同,因为它太直接了,您要避免使用print,而应使用return。我知道您在这里没有使用print,但是您误解了return的工作原理,我认为同样的教训也适用。

这是一个示例:您有两个功能。

def Function1(x,y):
    z = x*y
    print z

def Function2(x,y):
    z = x*y
    return z

函数1打印z,这意味着无论您要执行什么操作,即使您只是想做数学运算,它也始终会显示print z到控制台。

同时,功能2 returns z表示将z的值返回给被调用的程序。还值得注意的是,一旦函数到达return行,它将停止进一步运行该函数。除此之外,没有理由编写代码,因为不再运行该函数,除非您有跳过return的更高级的代码(例如,if语句)。

为什么return在概念上如此重要?

因为在您的原始代码中,您运行函数inData(),然后,您不仅运行了return两次,而且在您的if语句中,您甚至都不使用inData返回的内容,而只是告诉程序运行inData()

当函数返回值时,您必须将其分配给某些对象。以任何随机编程语言中的简单数学为例。代码:

 x = sqrt(4)
 print x

将输出2,因为在函数sqrt()的末尾,它将返回其答案。在这里,我们将x分配为sqrt(4)赋予return的变量。确实是这样的:

 sqrt(4)

还会在控制台上打印2,这是由于语言开发人员的防呆设计,实际上,该语言假定您要打印代码。您不是在告诉它这样做。

因此,当您运行代码行时:

inData()
triangle(base, height)

您基本上是在说:

run the function inData()
run the function triangle(base, height)

由于它们的returns,您需要在什么时候说:

set <variable1> equal to the return of inData()
set <variable2> equal to the return of triangle(base,height)

(这里需要做更多的简化,但是我们稍后会介绍)。

return的最后一件事。在编程中,写:

x = 1+1
return x

return 1+1完成相同的操作时。因此,无需定义三角形的area然后是return area。只需告诉函数return它在同一行代码中计算出area的内容即可!

我失去了你吗?还在我这儿?好!

简化您的代码

您的代码有一些结构性问题,尽管它可能会起作用,但会使查看它的更多经验丰富的程序员感到困惑。当我们在这里时,为什么不让我知道您是否可以理解这是一个更好的做法。

在您的代码中,您已经编写了(摘要形式)

variables defined that you don't need
def FunctionThatGathersData()
def FunctionThatDoesTheMath(x,y)
if (condition)
     FunctionThatGathersData()
     FunctionThatDoesTheMath(x,y)
     print out the results

这种结构会使具有更多经验的程序员感到困惑。他可能会问以下问题:

什么?
你为什么这样退货?
为什么要定义变量?
为什么不合并FunctionThatGathersDataFunctionThatDoesTheMath

其中一些原因已在上面阐明,但让我们来看最后两个问题。

为什么要定义变量?:一方面,Python在执行期间处理变量。因此,您不必提前定义它们,但是您可以,并且它的优点如下:

x = 0
def Function()
    x = 5
    y = 10

查看此代码,您可能想知道为什么要定义x。简单的答案是Python将看到您已经有一个x,因此,当您运行Function()时,您希望使用函数内部的工作将其覆盖。另一方面,y没有先前的定义,因此将创建一个新变量。

但是,在您的函数中,我们不需要任何这些,因为您的答案以最佳形式出现,无需依赖函数外的x

为什么我们不能仅使用我们所了解的关于参数,参数和返回值的方法将两个函数组合在一起? (提示:我们可以!)

这是一个新的代码片段,您现在应该可以阅读和理解。将您的内容清除一下,看看是否有意义。在其中,您将:

定义您的功能DoTheMathAndThenGiveMeTheValueBack
确定__name__ == '__main__'
提供您的值(将它们放入变量中)
将这些变量作为参数传递给函数
告诉程序先打印baseheight,然后根据函数的返回值打印area

代码

def CalculateTriangleArea(b,h):
    return b / 2 * h

if __name__ == '__main__':
    base = float(raw_input("Base:"))
    height = float(raw_input("Height:"))
    area = CalculateTriangleArea(base,height)
    print "The area of a triangle of base", base, "and height", height, "will be", area

如果您不这样做,请发表评论并问我更多,因为我记得为此感到挣扎,并且知道您有什么误会。

哦!我忘了向您提及如何处理多个returns

如果需要在一个函数中返回多个值,可以通过arraytuple来返回。这只是您存储的值的列表。您可以通过以array的形式在末尾包含tuple来访问index[i]中的任何项目,其中第一个项目位于[0]。例如:

def Function():
    string1 = "nobody"
    string2 = "expects"
    string3 = "the"
    string4 = "spanish"
    string5 = "inquisition"
    return string1, string2, string3, string4, string5

print Function()[0]
print Function()[1]
print Function()[2]
print Function()[3]
print Function()[4]
print Function() #prints the whole tuple!

会给你:

nobody
expects
the
spanish
inquisition
('nobody', 'expects', 'the', 'spanish', 'inquisition')

理解? 🙂

有关Python的更多动手工作,请尝试grok出色的Python教程。

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

字符串文字中的正斜杠表现异常 - python

为什么S1和S2在撇号位置方面表现不同?S1="1/282/03/10" S2="4/107/03/10" R1="".join({"N\'" ,S1,"\'" }) R2="".join({"N\'…

Python:检查新文件是否在文件夹中[重复] - python

This question already has answers here: How do I watch a file for changes? (23个答案) 3年前关闭。 我是python的新手,但是我尝试创建一个自动化过程,其中我的代码将侦听目录中的新文件条目。例如,某人可以手动将zip文件复制到一个特定的文件夹中,并且我希望我的代码能够在文件完全…

子条件的python条件覆盖 - python

我试图找到一个python代码覆盖率工具,该工具可以衡量语句中是否包含子表达式:例如,我想看看下面的示例是否涵盖了condition1 / condition2 / condtion3?if condition1 or condition2 or condition3: x = true_value python大神给出的解决方案 对此的唯一合理答案是:当前…