2012-04-17 171 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