【问题标题】:For loop within function in PythonPython中函数内的for循环
【发布时间】:2020-06-22 16:50:56
【问题描述】:

这里是编程初学者

我正在尝试在“Di =”方程中使用的函数中提取 for 循环的变量,如下所示:

                def fun1():
                    global de, ep
                    with open("Di_Tub.csv", "r") as f3:
                        reader3 = csv.reader(f3, delimiter=';')
                        i3 = 0
                        for row3 in reader3:
                            i3 = i3 + 1
                            if i3 >= 1:
                                if row3[0] == DN:
                                    if row3[1] == SCH:
                                        de = float(row3[2])
                                        ep = float(row3[3])
                    f3.close()
                fun1()
                Di = (de - 2*ep)/1000

我得到的是这个错误:

Di = (de - 2*ep)/1000
NameError: name 'de' is not defined

我做错了什么?

【问题讨论】:

  • 尝试放置:global de = float(row3[2])global ep = float(row3[3])
  • 关于这段代码的一些问题:你为什么需要 fun1()?函数不返回任何内容,如果您需要变量值,则编写没有函数的简单循环。最重要的是:为什么需要 i3?什么是DN和SCH?如果使用上下文管理器(with),则不需要关闭文件
  • 你好艾瓦。如前所述,我是编程的初学者。这只是整个代码的一部分。 DN 和 SCH 是先前定义的变量。因为我还有其他 2 个 for 循环,所以我决定在这里将计数器命名为 i3。关于 fun1(),我想尝试一个新的东西,而不是仅仅编写 for 循环,这不起作用。

标签: python function for-loop


【解决方案1】:

当你将它们标记为全局时,你需要在函数之外有全局对象:

de = 0.0
ep = 0.0

def fun1():
    global de, ep
    with open("Di_Tub.csv", "r") as f3:
        reader3 = csv.reader(f3, delimiter=';')
        i3 = 0
        for row3 in reader3:
            i3 = i3 + 1
            if i3 >= 1:
                if row3[0] == DN:
                    if row3[1] == SCH:
                        de = float(row3[2])
                        ep = float(row3[3])
   # f3.close() # you don't need this, "with open" does this for you
fun1()
Di = (de - 2*ep)/1000 # this will now work

【讨论】:

  • @EduardSchachtSasse 没问题。我很高兴能帮上忙。如果我的回答对您有帮助,请将其标记为您问题的答案。
  • 对不起,我真的弄错了。代码运行没有错误,但无论 f3 文件中的内容如何,​​“de”和“ep”都等于 0。我尝试了其他答案的建议,但效果不佳。您还有其他解决方案吗?
【解决方案2】:

你应该在函数外部定义变量所以应该是:

            global de, ep

            def fun1():
                with open("Di_Tub.csv", "r") as f3:
                    reader3 = csv.reader(f3, delimiter=';')
                    i3 = 0
                    for row3 in reader3:
                        i3 = i3 + 1
                        if i3 >= 1:
                            if row3[0] == DN:
                                if row3[1] == SCH:
                                    de = float(row3[2])
                                    ep = float(row3[3])
                f3.close()
            fun1()
            Di = (de - 2*ep)/1000

【讨论】:

    【解决方案3】:

    我建议你使用 return 语句而不是全局变量,但如果你想使用全局变量,你应该在函数之外声明它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 2018-10-05
      相关资源
      最近更新 更多