Helpex - Trao đổi & giúp đỡ Đăng nhập

tên 'times' được sử dụng trước khi khai báo toàn cục - Nhưng nó đã được khai báo!

Nguyễn Thái Lan
· 22:43 20/01/2010
hôm qua

Tôi đang viết mã một chương trình nhỏ theo thời gian và trình diễn, theo cách có thứ tự, các bài giải khối Rubik của tôi. Nhưng Python (3) tiếp tục làm phiền tôi về thời gian được sử dụng trước khi khai báo toàn cầu. Nhưng điều kỳ lạ là IT IS đã tuyên bố, ngay trên người ăn xin, như times = [](vâng, đó là một danh sách) và sau đó một lần nữa, trên chức năng (đó là nơi anh ta phàn nàn) là times = [some, weird, list]và "toàn cầu hóa" nó với global times. Đây là mã của tôi, vì vậy bạn có thể phân tích nó như bạn muốn:

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()

Mọi sự giúp đỡ sẽ rất được đánh giá cao vì tôi là người mới trong thế giới Python :)

33 hữu ích 0 bình luận 57k xem chia sẻ
Vũ Huệ Nghi
· 22:48 20/01/2010
22:48:05 20/01/2010

Việc kê khai toàn cầu là khi bạn tuyên bố rằng timesglobal

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

Nếu một biến được khai báo global, nó không thể được sử dụng trước khi khai báo.

Trong trường hợp này, tôi nghĩ bạn không cần khai báo gì cả, bởi vì bạn không chỉ định times, chỉ sửa đổi nó.

39 hữu ích 2 bình luận chia sẻ
Bùi Mỹ Thuận
· 22:49 20/01/2010
22:49:23 20/01/2010

Từ tài liệu Python:

Các tên được liệt kê trong một câu lệnh toàn cục không được sử dụng trong cùng một khối mã về văn bản trước câu lệnh chung đó.

https://docs.python.org/reference/simple_stmts.html#global

Vì vậy, di chuyển global timesđến đầu của chức năng nên sửa chữa nó.

Tuy nhiên, bạn nên cố gắng không sử dụng globaltrong tình huống này. Cân nhắc sử dụng một lớp học.

26 hữu ích 0 bình luận chia sẻ
Bùi Hoàng Huy
· 22:54 20/01/2010
22:54:21 20/01/2010

Từ tài liệu Python

Các tên được liệt kê trong một câu lệnh toàn cục không được sử dụng trong cùng một khối mã về văn bản trước câu lệnh chung đó.

3 hữu ích 0 bình luận chia sẻ
Đặng  Dũng Cường
· 22:56 20/01/2010
22:56:45 20/01/2010

Chương trình này sẽ hoạt động nhưng có thể không hoạt động chính xác như bạn dự định. Hãy lưu ý những thay đổi.

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()
1 hữu ích 0 bình luận chia sẻ
Ngô Hồng Phúc
· 09:05 29/09/2016
09:05:29 29/09/2016

Đối với chương trình chính, bạn có thể khai báo nó ở trên cùng. Ther sẽ không có cảnh báo. Tuy nhiên, như đã nói, đề cập toàn cầu không hữu ích ở đây. Mỗi biến được đưa vào chương trình chính nằm trong không gian toàn cục. Trong các hàm, bạn phải khai báo rằng bạn muốn sử dụng không gian chung cho nó với từ khóa này.

0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ python python-3.x global-variables , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm