Saya seorang pemula untuk Python dan pengkodean secara umum. Saya mencoba menulis program untuk permainan TicTacToe dasar. Saya menemukan beberapa kode online untuk menemukan pemenang vertikal, tetapi saya kesulitan memahaminya. Saya mengerti apa yang terjadi ketika saya mengukur kemenangan horizontal pada loop for pertama, tetapi saya tidak mengerti apa yang diukur oleh for col in range(len(game)) dan bagaimana perbedaannya dengan loop for pertama yang ditulis untuk horizontal menang. Bantuan apa pun akan sangat dihargai.

game = [[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]]

def win(current_game):
    for row in game:
        if row.count(row[0]) == len(row) and row[0] != 0: 
            print("Winner")
    for col in range(len(game)):  
        check = []
        for row in game: 
            check.append(row[col])  
            if check.count(check[0]) == len(check) and check[0] != 0:
                print("Winner")
0
Wolf_dawg 11 April 2020, 21:30

1 menjawab

Jawaban Terbaik

Loop for pertama berulang melalui setiap baris, menghitung berapa kali elemen pertama muncul, dan mencetak "Winner" jika nilai pertama mengisi baris itu. Nilai yang membentuk setiap baris disimpan dengan rapi di dalam daftarnya sendiri, jadi ini cukup sederhana.

Loop for kedua melakukan hal yang sama, kecuali looping melalui kolom, dan memeriksa untuk melihat apakah nilai yang sama mengisi salah satunya. Ini sedikit lebih rumit karena nilai dalam kolom tersebar di seluruh daftar yang membentuk baris berbeda. Loop for kedua membuat array sementara yang disebut check, dan kemudian loop for ketiga (yang berada di dalam yang kedua) melewati setiap baris, mengambil nilai dari baris tersebut yaitu di kolom saat ini, dan menambahkannya ke daftar check. Setelah menambahkan semua nilai yang membentuk kolom ke daftar yang sama memudahkan untuk memeriksa apakah nilai pertama dalam kolom tersebut mengisi seluruh kolom.

Selain itu, pernyataan if di dalam loop for ketiga seharusnya hanya berada di dalam loop for kedua:

for col in range(len(game)):
    check = []
    for row in game:
        check.append(row[col])
    if check.count(check[0]) == len(check) and check[0] != 0:
        print("Winner")

Jika tidak, setelah Anda menemukan elemen yang bukan 0 di baris pertama kolom, larik check hanya akan memiliki satu elemen di dalamnya dan check.count(check[0]) akan sama dengan len(check), sehingga akan mencetak "Winner" tanpa memeriksa elemen lainnya di kolom tersebut.

1
devjoco 11 April 2020, 19:05