2016-07-07 66 views
1

我正在试图制作一个像战舰一样的程序。基于输入生成行和列()

这是我到目前为止。

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

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

self加上play的定义。当你调用该方法的类实例被传递,所以你需要处理,在你的方法定义:

def play(self, rows, columns): 
    #... 

还有其他的bug等待去了,这样的:你需要投你输入int ,那么你就需要在你的循环使用range

for i in range(rows): 
    for j in range(columns): 
     print("O") 
+0

当添加自我时,我得到了一个输出“O”。 – kommander0000

+0

@ kommander0000你期待什么输出? –

+0

基于收集的输入,可以说行= 6和列= 6,你会得到一个6x6的网格 – kommander0000

0

当你调用s.play(rowinput, colinput),对象“S”也传递(隐含的)的功能“玩”(因为它是第一个参数)。这就是错误所说的三个参数正在传递给函数播放,但签名表示它只接受两个参数。现在在python中,约定是使用名称“self”作为类实例的参数。所以只需添加另一个参数的功能,就像这样

def play(self, rows, columns): 
+0

添加自我时,我的输出只是“O” – kommander0000