2016-12-03 30 views
0

私は戦艦を作ろうとしていますが、私はその船を1つのリスト「ボード」にしており、船の長さはスライスによって決定されます。私はrandom.choiceで船を動こうとしていますが、すぐにランダムを実現しました。選択肢は一度に1つの要素しか移動しませんが、船には2〜5の要素があります。私はリスト内のスライスをスライスに割り当てられたユニットとしてランダム化できるかどうかを確認しようとしています。 random.shuffleは機能していないようです。スライスをランダム化する方法は?

import random 

board = "o" 

board = [board] * 49 

ship_two_space = board[0:2] 

ship_three_space = board[0:3] 

ship_three_space_second = board[0:3] 

ship_four_space = board[0:4] 

ship_five_space = board[0:5] 
+0

あなたの質問は完全にはっきりしておらず、提供したコードは、あなたが試したことややろうとしていることを示していないので、全く役に立たない。 – Julien

+0

スライスは常に0から始まりますか?ボードの寸法は? – wwii

答えて

0

船の位置がオーバーラップすることはできません -船を定義にをcollections.namedtupleを使用する - 船を作る仕様

N = 49 
board = ['o'] * N 
ship_specs = [('two_space', 2), ('three_space1', 3), ('three_space2', 3), 
       ('four_space', 4), ('five_space', 5)] 

スタートを定義

occupied = set() 

占有スペースを文書化するセットを使用

Ship = collections.namedtuple('Ship', ('name','indices', 'slice')) 

def get_position(length): 
    '''Determine the unique position indices of a ship''' 

    start = random.randint(0, N-length) 
    indices = range(start, start + length) 
    if not occupied.intersection(indices): 
     occupied.update(indices) 
     return indices, slice(start, start + length) 
    else: 
     return get_position(length) 

ships = [] 

for name, length in ship_specs: 
    indices, _slice = get_position(length) 
    ships.append(Ship(name, indices, _slice)) 


print(board) 
for ship in ships: 
    board[ship.slice] = str(len(ship.indices))*len(ship.indices) 
print(board) 
print([(ship.name, ship.slice) for ship in ships]) 

>>> 
['o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o'] 
['o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', '2', '2', '4', '4', '4', '4', '3', '3', '3', 'o', '5', '5', '5', '5', '5', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', '3', '3', '3', 'o', 'o', 'o'] 
[('two_space', slice(10, 12, None)), ('three_space1', slice(43, 46, None)), ('three_space2', slice(16, 19, None)), ('four_space', slice(12, 16, None)), ('five_space', slice(20, 25, None))] 
>>> 
関連する問題