2012-04-17 120 views
1

我正在用python创建一个战舰游戏。我创建了一块10X10的电路板,看起来就像这样。蟒蛇战列舰游戏

------------------------------------------------- 
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 
------------------------------------------------- 
11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 
------------------------------------------------- 
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 
------------------------------------------------- 
31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 
------------------------------------------------- 
41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 
------------------------------------------------- 
51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 
------------------------------------------------- 
61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 
------------------------------------------------- 
71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 
------------------------------------------------- 
81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 
------------------------------------------------- 
91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100| 
------------------------------------------------- 

现在我在哪里的船都位于作为这样的列表: S = [[21,22,23,24,25], [45,55,65,75], [ 1,2,3], [85,86,87], [5,15], [46,56]]

我试图写一个函数,它允许从用户对一个点输入,如果输入在列表中,它应该返回命中。如果不是,它会返回小姐。

这是我到目前为止有:

def createBoard(): 
    board=[] 
    for i in range(10): 
     board.append(str(i)+" ") 
    for j in range(10,100): 
     board.append(j) 
    return(board) 
def printBoard(board): 
    for i in range(0,100,10): 
     print("\n"+"-"*45) 
     for j in range(1,10,1): 
      print(board[i+j],"|",end=" ") 
    print("\n"+"-"*45) 
printBoard(createBoard()) 

position=int(input("Choose position on the board")) 
g="Miss" 
a="hit" 
s = [[21,22,23,24,25], 
    [45,55,65,75], 
    [1,2,3], 
    [85,86,87], 
    [5,15], 
    [46,56]] 
for i in range(0,len(s),1): 
    if position in s[i]: 
     print(a) 
    elif position not in s[i]: 
     print(g) 

到目前为止发现的输入是否是在列表中,但它返回它的五倍,我只希望它被返回一次。我只能使用基本代码,因为我不知道很多高级工作。

+3

这将使它显著更容易使用一个2D列表,而不是你目前正在进行的那个时髦列表。 – 2012-04-17 19:45:14

回答

3

您可以在print(a)之后添加一个break语句。这将退出(跳出)for循环。

编辑:

目前的情况是,如果你错过了将它打印出来5次了。你需要你的循环之前设置一些变量,而您已经检查了所有的船只,只有后,如果你还没有找到一个,然后把它打印出来(只有一次,循环外)

found = False 
    for i in range(0,len(s),1): 
     if position in s[i]: 
      print(a) 
      found = True 
      break 
    if not found: 
     print(g) 
+0

这将为每个不包含'position'的子列表打印“Miss”。 – 2012-04-17 19:50:25

+0

@mteckert你说得对,我已经更新了答案。 – SirGuy 2012-04-17 19:55:56

+0

我现在的答案基本上是一字一句,所以+1! :) – 2012-04-17 19:57:54