Buat dan inisialisasi kisi 5x5 untuk Kapal Perang

Jadi saya baru saja menyelesaikan satu bagian masalah CodeAcademy Battleship, dan telah mengirimkan jawaban yang benar tetapi saya kesulitan memahami mengapa jawaban itu benar.

Idenya adalah membuat kotak berukuran 5x5 sebagai papan, diisi dengan huruf "O". Kode yang benar yang saya gunakan adalah:

board = []
board_size=5

for i in range(board_size):

    board.append(["O"] *5)

Namun saya bingung mengapa ini tidak membuat 25 "O" dalam satu baris karena saya tidak pernah menentukan untuk beralih ke baris terpisah. Saya mencoba

for i in range(board_size):

    board[i].append(["O"] *5)

tapi ini memberi saya kesalahan: IndexError: list index out of range. Adakah yang bisa menjelaskan mengapa yang pertama benar dan bukan yang kedua?


person KRS-fun    schedule 29.01.2014    source sumber


Jawaban (7)


["O"]*5

Ini membuat daftar ukuran 5, diisi dengan "O": ["O", "O", "O", "O", "O"]

board.append(["O"] *5)

Ini menambahkan (menambah ke akhir daftar) daftar di atas ke board[]. Melakukan ini 5 kali dalam satu putaran akan membuat daftar berisi 5 daftar di atas.

[["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"]]

Kode Anda tidak berfungsi karena daftar tidak diinisialisasi dengan ukuran di python, itu hanya dimulai sebagai wadah kosong []. Untuk membuat milik Anda berfungsi, Anda bisa melakukan:

board = [[],[],[],[],[]]

dan di lingkaran Anda:

board[i] = ["O"]*5
person turbo    schedule 29.01.2014

Daftar Python awalnya kosong:

board = [] # empty list

Tidak seperti beberapa bahasa pemrograman, Anda tidak menentukan atau menginisialisasi batas-batas array, jadi jika Anda mencoba mengakses berdasarkan indeks:

board[0]

Anda akan mendapatkan IndexError; belum ada indeks 0.

Pada versi pertama, pada setiap perjalanan melalui putaran for, Anda append (menambahkan ke akhir daftar) sebuah daftar baru yang berisi lima "O"s. Jika Anda ingin daftar board berisi 25 "O"s, Anda harus menggunakan extend sebagai gantinya:

for i in range(board_size):
    board.extend(["O"] *5)
person jonrsharpe    schedule 29.01.2014

Kode akan terlihat seperti ini. board = [] for i in range(0, 5): board.append(["O"]*5) print(board)

person SanchelliosProg    schedule 14.05.2015

Saya pikir masalahnya sederhana: ketika Anda menjalankan kode Anda, array Anda kosong!

Anda bisa mengeluarkan a

board = [[], [], [], [], []]

untuk menginisialisasinya sebagai array lima tempat bersarang.

Anda juga bisa menggunakan dict untuk mensimulasikan array bersarang tanpa batas:

board=defaultdict(lambda:defaultdict(lambda:[]))
person Vincenzo Maggio    schedule 29.01.2014

board = []
board_size=5

for i in range(board_size):

    board.append(["O"] *5)

Dalam kode ini board dimulai sebagai daftar kosong. ["O"] * 5 akan membuat daftar yang sama dengan ["O", "O", "O", "O", "O"]. Kemudian akan ditambahkan ke daftar board. Ini akan terjadi 5 kali dalam contoh ini sejak board_size == 5.

for i in range(board_size):

    board[i].append(["O"] *5)

Ini tidak akan berfungsi kecuali item di indeks i adalah daftar karena append() adalah metode kelas list. Jika Anda ingin memasukkan sesuatu di i Anda akan menggunakan metode daftar insert()

person kylieCatt    schedule 29.01.2014

Ini karena setiap kali Anda menjalankan board.append(["O"] *5) Anda membuat daftar baru (karena tanda kurung siku digunakan di dalam pernyataan append).

Jika Anda menggunakan board.append("O" *5), Anda akan mendapatkan satu daftar dengan lima elemen seperti:

['OOOOO', 'OOOOO', 'OOOOO', 'OOOOO', 'OOOOO']

*5 mengalikan string. jika Anda baru saja menjalankan dari prompt interaktif 'O' * 5 Anda mendapatkan:

'OOOOO'

Namun, jika Anda menjalankan ['O'] * 5 itu akan mengalikan teks di dalam daftar dan Anda mendapatkan daftar dengan lima elemen.

['O', 'O', 'O', 'O', 'O']

Anda menambahkan lima daftar, masing-masing memiliki 5 elemen.

person ChrisProsser    schedule 29.01.2014

Langkah pertama dalam akademi kode

board = []
for i in range(5):
    board.append(["O"]*5)

print board

Langkah kedua dalam akademi kode

board = []

def print_board(board):
    for x in range(5):
        board= (["O"] * 5)
        print board
    return board

print_board(board)

langkah ketiga dalam akademi kode

board = []

def print_board(board):
    for x in range(5):
        board= (["O"] * 5)
        print " ".join(board)
    return board

print_board(board)

Langkah ke-4

from random import randint 

board = []

for x in range(0, 5):
    board.append(["O"] * 5)

def print_board(board):
    for row in board:
        board = " ".join(row)
        return  board

def random_row(board):
    return randint(0, len(board) - 1)

def random_col(board):
    return randint(0, len(board) - 1)

print print_board(board)
print random_row(board)
print random_col(board)

Langkah ke-5 dari buttleship di codeacademy

from random import randint

board = []

for x in range(0,5):
    board.append(["O"] * 5)

def print_board(board):
    for row in board:
        print " ".join(row)

def random_row(board):
    return randint(0, len(board) - 1)

def random_col(board):
    return randint(0, len(board[0]) - 1)

ship_row = random_row(board)
ship_col = random_col(board)


guess_row = int(raw_input("Guess Row: "))
guess_col = int(raw_input("Guess Col: "))

Langkah Terakhir Ayo.. Mainkan game BettleShip CodeAcademy

from random import randint

board = [] untuk x dalam rentang(5): board.append(["O"] * 5)

def print_board(board): untuk baris di papan: print " ".join(row)

print "Ayo main Battleship!" print_board(papan)

def random_row(papan): kembalikan randint(0, len(papan) - 1)

def random_col(papan): kembalikan randint(0, len(papan[0]) - 1)

baris_kapal = baris_acak(papan) kapal_col = kolom_acak(papan) cetak baris_kapal cetak baris_kapal

giliran=0 menang = 0 untuk giliran dalam rentang(4): jika giliran ‹= 5: tebakan_baris = int(raw_input("Tebak Baris:")) tebakan_col = int(raw_input("Tebak Kolom:"))

    if guess_row == ship_row and guess_col == ship_col:
        print "Congratulations! You sunk my battleship!"
        win +=1
        if win == 2:
            break
    else:
        turns +=1
        if (guess_row < 0 or guess_row > 4) or (guess_col < 0 or guess_col > 4):
            print "Oops, that's not even in the ocean."
        elif(board[guess_row][guess_col] == "X"):
            print "You guessed that one already."
        else:
            print "You missed my battleship!"
            board[guess_row][guess_col] = "X"
            print (turn + 1)
        print_board(board)
elif turns == 3:
    print "Game Over"
else:
    print "Max Turn try is over Try Again"
person Engr Nayab Bukhari Syed    schedule 22.07.2014