Vì vậy, tôi đang làm một trò chơi tic-tac-toe và tôi nghĩ tôi sắp hoàn thành. tôi đang cố gắng làm cho trò chơi có thể chơi nhiều hơn một lần trước khi kết thúc. Vì vậy, tôi đã đặt nó vào một hàm def[]… nhưng khi chạy nó thì kết quả là NameError: name 'turn' is not defined
. Bất kỳ ý tưởng tại sao và làm thế nào để khắc phục điều này?
def game[]:
blanksheet = "|1|2|3|\n|4|5|6|\n|7|8|9|"
sheet = blanksheet
print[sheet]
gone = []
turn = 0
def play[XO,player,listXO]:
global turn
global sheet
global listx
global listo
while True:
num = input[player+" enter an available number where you want to put an "+XO+".\n > "]
try:
num = int[num]
except ValueError:
print["Not a valid number, try again."]
continue
if num < 1 or num > 9:
print["Number not in correct range, try again."]
continue
if num in gone:
print["Number already used, try again."]
continue
gone.append[num]
listXO.append[num]
turn += 1 #the "problem is here"
sheet = sheet.replace[str[num],XO]
print[sheet]
break
win = "h"
listx = []
listo = []
def checkstatus[listXO, playerwin]:
if len[listXO] >= 3:
if 1 in listXO and 2 in listXO and 3 in listXO:
winspeak[playerwin] #vertical
elif 4 in listXO and 5 in listXO and 6 in listXO:
winspeak[playerwin] #vertical
elif 7 in listXO and 8 in listXO and 9 in listXO:
winspeak[playerwin] #vertical
elif 1 in listXO and 4 in listXO and 7 in listXO:
winspeak[playerwin] #horizontal
elif 2 in listXO and 5 in listXO and 8 in listXO:
winspeak[playerwin] #horizontal
elif 3 in listXO and 6 in listXO and 9 in listXO:
winspeak[playerwin] #horizontal
elif 1 in listXO and 5 in listXO and 9 in listXO:
winspeak[playerwin] #diagonal
elif 3 in listXO and 5 in listXO and 7 in listXO:
winspeak[playerwin] #diagonal
if [len[listx] + len[listo]] == 9:
print["\n Neither player wins, thats a tie!"]
exit[]
def winspeak[player]:
print["\n"+player+" wins!"]
exit[]
def checkplay[]:
while win != "Xwin" or win != "Owin":
if turn % 2 == 0:
play["X","Player 1",listx]
checkstatus[listx,"Player 1"]
else:
play["O","Player 2",listo]
checkstatus[listo,"Player 2"]
checkplay[]
game[]
Chào Drew,
Hãy nhớ rằng Python sử dụng thụt đầu dòng để cho biết nội dung bên trong hàm
và những gì bên ngoài nó. Bạn nên xác định các chức năng của mình ở đầu
bạn tập tin. Mỗi chức năng nên bắt đầu ở cấp 1 [không được thụt lề] như thế này
def game[]:
# block is indented
# don't indent the function signature
def play[XO, player, listXO]:
# block is indented
# Finally at the end:
game[] # not indented
Không thụt lề các chức năng bên trong các chức năng khác
Để lại một khoảng cách đẹp [hai dòng] giữa các chức năng để dễ dàng hơn
phát hiện khi một kết thúc và tiếp theo bắt đầu. Điều đó không tạo ra sự khác biệt nào đối với
Trình thông dịch Python, nhưng nó giúp người đọc [bạn] phát hiện ra một
chức năng kết thúc và tiếp theo bắt đầu
Các hằng số không bao giờ thay đổi nên được xác định ở đầu
chương trình, trước các chức năng. Đó là quy ước để viết chúng trong
tất cả chữ hoa để người đọc biết rằng họ không bao giờ nên thay đổi
BLANKSHEET = "|1|2|3|\n|4|5|6|\n|7|8|9|\n"
Các biến toàn cục của bạn phải được xác định trong hàm game[]
def game[]:
global turn, sheet, listx, listo
turn = 0
sheet = BLANKSHEET
print[sheet]
...
Có thể có những cải tiến và nhận xét khác cần thiết sau đó
Hãy vui vẻ với lập trình của bạn
Bước đầu tiên trong việc sửa lỗi viết mã là hiểu lỗi. Mặc dù một số thông báo lỗi có vẻ khó hiểu nhưng hầu hết chúng sẽ giúp bạn khắc phục lỗi
Trong bài viết này, chúng ta sẽ nói về một lỗi thuộc danh mục NameError trong Python
Bạn sẽ thấy NameError là gì, một số ví dụ về mã để cho biết cách thức/tại sao xảy ra lỗi và cách khắc phục chúng
NameError trong Python là gì?
Trong Python, NameError xảy ra khi bạn cố gắng sử dụng một biến, hàm hoặc mô-đun không tồn tại hoặc không được sử dụng theo cách hợp lệ
Một số lỗi phổ biến gây ra lỗi này là
- Sử dụng tên biến hoặc hàm chưa được xác định
- Viết sai tên biến/hàm khi gọi biến/hàm
- Sử dụng mô-đun Python mà không cần nhập mô-đun, v.v.
Cách khắc phục "NameError. Tên không được xác định" trong Python
Trong phần này, bạn sẽ thấy cách sửa lỗi "NameError. Tên không được xác định" lỗi trong Python
Tôi đã chia phần này thành các phần con để hiển thị lỗi ở trên khi sử dụng biến, hàm và mô-đun
Chúng ta sẽ bắt đầu với các khối mã gây ra lỗi và sau đó xem cách khắc phục chúng
Ví dụ #1 - Tên biến không được xác định trong Python
name = "John"
print[age]
# NameError: name 'age' is not defined
Trong đoạn mã trên, chúng ta đã định nghĩa một biến name
nhưng đã cố in ra biến
name = "John"
age = 12
print[age]
# 12
0 mà vẫn chưa được xác địnhChúng tôi gặp lỗi cho biết.
name = "John"
age = 12
print[age]
# 12
1 để chỉ ra rằng biến name = "John"
age = 12
print[age]
# 12
0 không tồn tạiĐể khắc phục điều này, chúng ta có thể tạo biến và mã của chúng ta sẽ chạy tốt. Đây là cách
name = "John"
age = 12
print[age]
# 12
Bây giờ giá trị của
name = "John"
age = 12
print[age]
# 12
0 được in raTương tự, lỗi tương tự có thể xảy ra khi chúng ta viết sai tên biến. Đây là một ví dụ
name = "John"
print[nam]
# NameError: name 'nam' is not defined
Trong đoạn mã trên, chúng tôi viết
name = "John"
age = 12
print[age]
# 12
4 thay vì ________ 29 ______. Để sửa lỗi như thế này, bạn chỉ cần đánh vần đúng tên biếnVí dụ #2 - Tên hàm không được xác định trong Python
def sayHello[]:
print["Hello World!"]
sayHelloo[]
# NameError: name 'sayHelloo' is not defined
Trong ví dụ trên, chúng ta đã thêm một chữ o trong khi gọi hàm —
name = "John"
age = 12
print[age]
# 12
6 thay vì name = "John"
age = 12
print[age]
# 12
7Chúng tôi đã nhận lỗi.
name = "John"
age = 12
print[age]
# 12
8. Lỗi chính tả như thế này rất dễ bỏ sót. Thông báo lỗi thường giúp sửa lỗi nàyĐây là cách đúng để gọi chức năng
def sayHello[]:
print["Hello World!"]
sayHello[]
# Hello World!
Giống như chúng ta đã thấy trong phần trước, việc gọi một biến chưa được xác định sẽ gây ra lỗi. Điều tương tự áp dụng cho các chức năng
Đây là một ví dụ
def sayHello[]:
print["Hello World!"]
sayHello[]
# Hello World!
addTWoNumbers[]
# NameError: name 'addTWoNumbers' is not defined
Trong đoạn mã trên, chúng ta đã gọi một hàm –
name = "John"
age = 12
print[age]
# 12
9 – chưa được định nghĩa trong chương trình. Để khắc phục điều này, bạn có thể tạo chức năng nếu bạn cần hoặc chỉ cần loại bỏ chức năng nếu nó không liên quanLưu ý rằng việc gọi một hàm trước khi tạo nó sẽ gây ra lỗi tương tự theo cách của bạn. Đó là
sayHello[]
def sayHello[]:
print["Hello World!"]
# NameError: name 'sayHello' is not defined
Vì vậy, bạn phải luôn xác định chức năng của mình trước khi gọi chúng
Ví dụ #3 - Sử dụng Mô-đun mà không nhập Lỗi Mô-đun trong Python
x = 5.5
print[math.ceil[x]]
# NameError: name 'math' is not defined
Trong ví dụ trên, chúng ta đang sử dụng phương thức
name = "John"
print[nam]
# NameError: name 'nam' is not defined
0 của Python mà không cần nhập mô-đun name = "John"
print[nam]
# NameError: name 'nam' is not defined
1Lỗi kết quả là thế này.
name = "John"
print[nam]
# NameError: name 'nam' is not defined
2. Điều này xảy ra vì thông dịch viên không nhận ra từ khóa name = "John"
print[nam]
# NameError: name 'nam' is not defined
1Cùng với các phương thức toán học khác trong Python, trước tiên chúng ta phải nhập mô-đun
name = "John"
print[nam]
# NameError: name 'nam' is not defined
1 để sử dụng nóĐây là một sửa chữa
import math
x = 5.5
print[math.ceil[x]]
# 6
Trong dòng đầu tiên của mã, chúng tôi đã nhập mô-đun
name = "John"
print[nam]
# NameError: name 'nam' is not defined
1. Bây giờ, khi bạn chạy đoạn mã trên, bạn sẽ nhận được 6Tóm lược
Trong bài viết này, chúng tôi đã nói về lỗi "NameError. Tên không được xác định" lỗi trong Python
Đầu tiên chúng tôi định nghĩa NameError là gì trong Python
Sau đó, chúng tôi đã xem một số ví dụ có thể gây ra NameError khi làm việc với các biến, hàm và mô-đun trong Python. Mỗi ví dụ, được chia thành các phần, cho thấy cách sửa lỗi
Mã hóa vui vẻ
QUẢNG CÁO
QUẢNG CÁO
QUẢNG CÁO
Tiểu sử của tác giả này có thể được tìm thấy trong các bài viết của ông
Nếu bạn đọc đến đây, hãy tweet cho tác giả để cho họ thấy bạn quan tâm. Tweet một lời cảm ơn
Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu