Python 基于输入()生成行和列

Python 基于输入()生成行和列,python,python-3.x,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(ro

我正在尝试制作一个类似“战舰”的程序

这就是我目前所拥有的

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
回溯(最近一次呼叫最后一次):
文件“C:/Users/OfficeUser/Documents/battleship.py”,第12行,在
s、 播放(行输入,共输入)
TypeError:play()接受2个位置参数,但给出了3个

我的问题是:如何通过
input()
实现基于用户输入的行和列生成?

类实例的方法将类的实例作为第一个参数

self
添加到
play
的定义中。调用方法时会传递类实例,因此需要在方法定义中处理该类实例:

def play(self, rows, columns):
    #...
还有其他的bug等待处理,比如:您需要将输入转换为
int
,然后需要在循环中使用
range

for i in range(rows): 
    for j in range(columns): 
        print("O")
调用
s.play(rowinput,colinput)
时,对象“s”也会(隐式)传递给函数“play”(作为它的第一个参数)。这就是错误所说的三个参数被传递给函数play,但是签名说它只接受两个。现在在python中,约定是使用名称“self”作为类实例的参数。只需向函数中添加另一个参数,如下所示

def play(self, rows, columns):

在添加self时,我得到的输出只有“O”。根据收集到的输入,假设row=6和column=6,您将得到一个6x6Yes的网格,这有点奇怪,因为我记得在其他项目中使用self,它工作得非常好。这很好。我设法得到了想要的输入。但是i和j是干什么的?它们是for循环的占位符吗?直接在循环中使用它们。像
print(i,j)
我在添加self时得到的输出只有“O”