我正在尝试制作一个类似“战舰”的计划。
这是我到目前为止所拥有的。
class Start:
def play(rows, columns):
for i in rows:
for j in columns:
print("O")
print("Testing")
rowinput = input("rows: ")
colinput = input("columns: ")
s = start()
s.play(rowinput, colinput)
这是我得到的错误代码:
Traceback (most recent call last):
File "C:/Users/OfficeUser/Documents/battleship.py", line 12, in <module>
s.play(rowinput, colinput)
TypeError: play() takes 2 positional arguments but 3 were given
我的问题是:如何通过input()
根据用户输入实现行和列生成?
答案 0 :(得分:2)
类实例的方法将类的实例作为第一个参数。
将self
添加到play
的定义中。调用方法时会传递类实例,因此您需要在方法定义中处理它:
def play(self, rows, columns):
#...
还有其他错误要等待,例如:您需要将输入转换为int
,然后您需要在循环中使用range
:
for i in range(rows):
for j in range(columns):
print("O")
答案 1 :(得分:0)
当你调用s.play(rowinput, colinput)
时,对象“s”也会(隐式)传递给函数“play”(因为它是第一个参数)。这就是错误说三个参数被传递给函数游戏,但签名说它只接受两个。现在在python中,约定是使用名称“self”作为类实例的参数。所以只需在函数中添加另一个参数,就像这样
def play(self, rows, columns):