2016-09-01 5 views
0

"。"というリストを作成しようとしています。私のゲームボードに行と列があると思われる回数だけ、各インデックスに表示されます。これは私が使用しているコードですが、エラーは私が 'str'型の非intでシーケンスを掛けることができないことを私に伝えています。私はPython 3.5.2を使用しています。Pythonでx文字のリストを作成するには?

def mkBoard(rows,columns): 
    board = ["."] * rows * columns 
    return board 

#Take user input for number of rows and columns for the board and converts them into integers 
rows = input('Enter the number of rows:') 
int(rows) 
columns = input('Enter the number of columns:') 
int(columns) 

#Create the board 
board = mkBoard(rows,columns) 
+0

'rows'と' columns'を整数に変換しますが、新しい値には何もしません – Li357

答えて

4

あなたは非常に近いです。

変数に新しいint値を割り当てるだけで済みます。 int()は変数を変更せず、新しい値のみを返します。したがって

は、適切な行の値を使用取得する:

rows = int(rows) 

と列余談として

について同じことを、また、あなたはボードを生成している方法を見てみなければなりません。 2x2ボードの場合、[[""、 "。"]]]のようなものが必要でしょう。リスト内包表記を参照することをお勧めします。

0

あなたのコードには、もう1つの答えで対処されていない別の問題があります。

>>> ['.'] * 5 * 5 
['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'] 

ボードの初期化によってフラットなリストが作成されますが、これはおそらくあなたが望むものではありません。通常は、リストのリストを使用します。しかし、オーバーロードされた乗算を使用すると、リストのリストを作成するための非常に悪い方法である:

>>> [['.'] * 5] * 5 
[['.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.']] 

今ので:すべての行が同じリストのコピーである

>>> board = _ 
>>> board[0][0] = 'hi' 
>>> board 
[['hi', '.', '.', '.', '.'], ['hi', '.', '.', '.', '.'], ['hi', '.', '.', '.', '.'], ['hi', '.', '.', '.', '.'], ['hi', '.', '.', '.', '.']] 

>>> board = [['.' for row in range(5)] for col in range(5)] 
>>> board 
[['.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.']] 
>>> board[0][0] = 'hi' 
>>> board 
[['hi', '.', '.', '.', '.'], ['.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.']] 
関連する問題