根据input()生成行和列

时间:2016-07-07 20:36:26

标签: python python-3.x

我正在尝试制作一个类似“战舰”的计划。

这是我到目前为止所拥有的。

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()根据用户输入实现行和列生成?

2 个答案:

答案 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):