python-3.x 名称“times "在全局声明之前使用-但它已声明

bvn4nwqk  于 2023-01-10  发布在  Python
关注(0)|答案(7)|浏览(150)

我正在编写一个小程序来计时和显示,以有序的方式,我的魔方解算。(3)一直困扰我的是在全局声明之前使用的时间。但奇怪的是,IT一开始就声明为times = [](是的,这是一个列表),然后再一次,在函数(这就是他抱怨的地方)上使用times = [some, weird, list],并使用global times“全局化”它。

import time

times = []

def timeit():
    input("Press ENTER to start: ")
    start_time = time.time()
    input("Press ENTER to stop: ")
    end_time = time.time()
    the_time = round(end_time - start_time, 2)
    print(str(the_time))
    times.append(the_time)
    global times
    main()
        
def main():
    print ("Do you want to...")
    print ("1. Time your solving")
    print ("2. See your solvings")
    dothis = input(":: ")
    if dothis == "1":
        timeit()
    elif dothis == "2":
        sorte_times = times.sort()
        sorted_times = sorte_times.reverse()
        for curr_time in sorted_times:
            print("%d - %f" % ((sorted_times.index(curr_time)+1), curr_time))
    else:
        print ("WTF? Please enter a valid number...")
        main()

main()

任何帮助都将非常感谢,因为我是Python世界的新手。

h6my8fg2

h6my8fg21#

全局声明是指声明timesglobal

def timeit():
    global times # <- global declaration
    # ...

如果变量声明为global,则不能在声明之前使用。
在本例中,我认为您根本不需要声明,因为您没有对times赋值,只是修改它。

uttx8gqw

uttx8gqw2#

从Python文档中:
全局语句中列出的名称不能在该全局语句前面的同一代码块中使用。
https://docs.python.org/reference/simple_stmts.html#global
因此,将global times移到函数的顶部应该可以修复它。
但是,在这种情况下,您应该尽量不要使用global。考虑使用类。

qnyhuwrf

qnyhuwrf3#

来自Python文档
全局语句中列出的名称不能在该全局语句前面的同一代码块中使用。

qxsslcnc

qxsslcnc4#

这个程序应该可以工作,但可能无法完全按照您的预期工作。请注意更改。

import time

times = []

def timeit():
    input("Press ENTER to start: ")
    start_time = time.time()
    input("Press ENTER to stop: ")
    end_time = time.time()
    the_time = round(end_time - start_time, 2)
    print(str(the_time))
    times.append(the_time)

def main():
    while True:
        print ("Do you want to...")
        print ("1. Time your solving")
        print ("2. See your solvings")
        dothis = input(":: ")
        if dothis == "1":
            timeit()
        elif dothis == "2":
            sorted_times = sorted(times)
            sorted_times.reverse()
            for curr_time in sorted_times:
                print("%d - %f" % ((sorted_times.index(curr_time)+1), curr_time))
            break
        else:
            print ("WTF? Please enter a valid number...")

main()
62lalag4

62lalag45#

import time

times = []

def timeit():
    global times
    input("Press ENTER to start: ")
    start_time = time.time()
    input("Press ENTER to stop: ")
    end_time = time.time()
    the_time = round(end_time - start_time, 2)
    print(str(the_time))
    times.append(the_time)
    main()

def main():
    print ("Do you want to...")
    print ("1. Time your solving")
    print ("2. See your solvings")
    dothis = input(":: ")
    if dothis == "1":
        timeit()
    elif dothis == "2":
        sorte_times = times.sort()
        sorted_times = sorte_times.reverse()
        for curr_time in sorted_times:
            print("%d - %f" % ((sorted_times.index(curr_time)+1), curr_time))
    else:
        print ("WTF? Please enter a valid number...")
        main()

main()

应该可以。“global[varname]”必须从定义开始;)

ivqmmu1c

ivqmmu1c6#

对于主程序,你可以在顶部声明它。不会有任何警告。但是,如前所述,全局提及在这里没有用。每个放在主程序中的变量都在全局空间中。在函数中,你必须声明你想用这个关键字为它使用全局空间。

62o28rlo

62o28rlo7#

我得到了下面相同的错误:
语法错误:名称"x"在全局声明之前使用
尝试使用**时,inner()中的局部和全局变量x**如下所示:

x = 0
def outer():
    x = 5
    def inner():        
        x = 10 # Local variable
        x += 1
        print(x)
        
        global x # Global variable
        x += 1
        print(x)
    inner()
outer()

并且,当尝试使用**inner()中的非局部和全局变量x**时,如下所示:

x = 0
def outer():
    x = 5
    def inner():
        nonlocal x # Non-local variable
        x += 1
        print(x)
        
        global x # Global variable
        x += 1
        print(x)
    inner()
outer()

因此,我将局部变量的x重命名为y,如下所示:

x = 0
def outer():
    x = 5
    def inner():        
        y = 10 # Here
        y += 1 # Here
        print(y) # Here
        
        global x        
        x += 1
        print(x)
    inner()
outer()

然后,如下所示解决了错误:

11
1

并且,我将非本地变量的x重命名为y,如下所示:

x = 0
def outer():
    y = 5 # Here
    def inner():
        nonlocal y # Here
        y += 1 # Here
        print(y) # Here
        
        global x
        x += 1
        print(x)
    inner()
outer()

然后,如下所示解决了错误:

6
1

相关问题