[英]Why is this python code not working (possible syntax error ?)
I am new to python and cannot understand why the method, goSouthWest, is not working with my tester.我是 python 的新手,不明白为什么 goSouthWest 方法不适用于我的测试仪。 Both files are located in the same folder.
这两个文件位于同一个文件夹中。 The issue that arises is "goSouthWest is not defined".
出现的问题是“未定义 goSouthWest”。 Basically a name error when calling the goSouthWest function in getPath function.
在 getPath function 中调用 goSouthWest function 时基本上是名称错误。 Could someone please tell me what's wrong with my code?
有人可以告诉我我的代码有什么问题吗? The tester's contents are as follows.
测试仪的内容如下。
Tester:测试人员:
from Map import Map
map1 = Map(10, 10)
print(map1.getPath(5, 5, 4, 1))
Class: Class:
import math
class Map:
def __init__(self, row, column):
self.row = row
self.column = column
def getPath(self, startRow, startCol, destRow, destCol):
if startRow < 0 or startRow > self.row or startCol < 0 or startCol > self.column or destRow < 0 or destRow > self.row or destCol < 0 or destCol > self.column:
raise ValueError("IllegalArgumentException")
elif (startRow >= destRow and startCol >= destCol):
path = goSouthWest(startRow, startCol, destRow, destCol)
return path
def goSouthWest(startRow, startCol, destRow, destCol): # goSouthWest method
colDiff = startCol - destCol
rowDiff = startRow - destRow
if (colDiff > rowDiff) and (startRow != destRow):
startRow -= 1
path = path + "(" + str(startRow) + "," + str(startCol) + ") "
elif (rowDiff > colDiff) and (startCol != destCol):
startCol -= 1
path = path + "(" + str(startRow) + "," + str(startCol) + ") "
elif (rowDiff > colDiff) and (startCol == destCol):
startRow -= 1
path = path + "(" + str(startRow) + "," + str(startCol) + ") "
elif (colDiff > rowDiff) and (startRow == destRow):
startCol -= 1
path = path + "(" + str(startRow) + "," + str(startCol) + ") "
elif (rowDiff == 0) and (colDiff == 0) and (destRow == 0) and (destCol == 0):
startCol += 1
path = path + "(" + str(startRow) + "," + str(startCol) + ") "
else:
startRow -= 1
path = path + "(" + str(startRow) + "," + str(startCol) + ") "
if startCol != destCol and startRow != destRow:
path = path + goSouthWest(startRow, startCol, destRow, destCol)
return path
You don't have the argument self
in goSouthWest
.您在
goSouthWest
中没有self
参数。 Also, you should call member functions as self.function()
, like path = self.goSouthWest(startRow, startCol, destRow, destCol)
此外,您应该将成员函数称为
self.function()
,例如path = self.goSouthWest(startRow, startCol, destRow, destCol)
Your code should be like this:你的代码应该是这样的:
import math
class Map:
def __init__(self, row, column):
self.row = row
self.column = column
def getPath(self, startRow, startCol, destRow, destCol):
if startRow < 0 or startRow > self.row or startCol < 0 or startCol > self.column or destRow < 0 or destRow > self.row or destCol < 0 or destCol > self.column:
raise ValueError("IllegalArgumentException")
elif (startRow >= destRow and startCol >= destCol):
path = goSouthWest(startRow, startCol, destRow, destCol)
return path
# every method of a class must have a self argument
def goSouthWest(self, startRow, startCol, destRow, destCol):
colDiff = startCol - destCol
rowDiff = startRow - destRow
if (colDiff > rowDiff) and (startRow != destRow):
startRow -= 1
path = path + "(" + str(startRow) + "," + str(startCol) + ") "
elif (rowDiff > colDiff) and (startCol != destCol):
startCol -= 1
path = path + "(" + str(startRow) + "," + str(startCol) + ") "
elif (rowDiff > colDiff) and (startCol == destCol):
startRow -= 1
path = path + "(" + str(startRow) + "," + str(startCol) + ") "
elif (colDiff > rowDiff) and (startRow == destRow):
startCol -= 1
path = path + "(" + str(startRow) + "," + str(startCol) + ") "
elif (rowDiff == 0) and (colDiff == 0) and (destRow == 0) and (destCol == 0):
startCol += 1
path = path + "(" + str(startRow) + "," + str(startCol) + ") "
else:
startRow -= 1
path = path + "(" + str(startRow) + "," + str(startCol) + ") "
if startCol != destCol and startRow != destRow:
# methods of the class must be called with self
path = path + self.goSouthWest(startRow, startCol, destRow, destCol)
return path
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.