Python Liste İle Zar Turnuvası

Merhabalar herkese kolay gelsin 8 kişiden oluşan bir zar turnuvası gibi bir turnuva yapmayı düşünüyorum fakat yapamadım yardımcı olursanız sevinirim. Örnek çıktığı ve yapabildiğim kodlamayı aşağıya bırakıyorum.
1.tur

  1. masa: 1. & 2. oyuncu: Atılan zarlar sırasıyla 2 ve 5, kazanan 2. oyuncu

  2. masa: 3. & 4. oyuncu: Atılan zarlar sırasıyla 6 ve 1, kazanan 3. oyuncu

  3. masa: 5. & 6. oyuncu: Atılan zarlar sırasıyla 3 ve 2, kazanan 5. oyuncu

  4. masa: 7. & 8. oyuncu: Atılan zarlar sırasıyla 2 ve 1, kazanan 7. oyuncu

2.tur

  1. masa 2. oyuncu & 3.oyuncu: Atılan zarlar sırasıyla 2 ve 5, kazanan 3. oyuncu

  2. masa 5. oyuncu & 7.oyuncu: Atılan zarlar sırasıyla 6 ve 1, kazanan 5. oyuncu

3.tur

  1. masa 3.oyuncu & 5.oyuncu: Atılan zarlar sırasıyla 1 ve 3, kazanan 5. oyuncu

Sonuç:

Kazanan 5.oyuncu

import random
import numpy as np

zar1 = (np.random.randint(1,7,8))
zar1 = zar1.reshape(4,2)
print(zar1)
tur1=[]
tur2=[]
tur3=[]
x=1
for i in range(4):
  for j in range(2):
    tur1.append("Oyuncu {}".format(x))
    x+=1
tur1=np.array(tur1).reshape(4,2)
print(tur1)

for i in range(4):
  for j in range(1):
    if zar1[i][j] > zar1[i][j+1]:
      tur2.append(tur1[i][j])
      print("{} turu kazandı. Atılan Zarlar:\n{}: {}\n{}: {}".format(tur1[i][j],tur1[i][j],zar1[i][j],tur1[i][j+1],zar1[i][j+1]))
    else:
      tur2.append(tur1[i][j+1])
      print("{} turu kazandı. Atılan Zarlar:\n{}: {}\n{}: {}".format(tur1[i][j+1],tur1[i][j],zar1[i][j],tur1[i][j+1],zar1[i][j+1]))
print(tur2)

başka fikir varsa çok sevinirim belki sizin için çok basittir pythona yeni başladım biraz zorlanıyorum.

Son olarak böyle yaptım fakat beraberlik olunca sıkıntı oluyor.

import random
import numpy as np

zar1 = (np.random.randint(1,7,8))
zar1 = zar1.reshape(4,2)

tur1=[]
tur2=[]
tur3=[]
kazanan=[]
x=1
for i in range(4):
  for j in range(2):
    tur1.append("Oyuncu {}".format(x))
    x+=1
tur1=np.array(tur1).reshape(4,2)


for i in range(4):
  for j in range(1):
    if zar1[i][j] > zar1[i][j+1]:
      tur2.append(tur1[i][j])
      print("{} turu kazandı. Atılan Zarlar:\n{}: {}\n{}: {}".format(tur1[i][j],tur1[i][j],zar1[i][j],tur1[i][j+1],zar1[i][j+1]))
    else:
      tur2.append(tur1[i][j+1])
      print("{} turu kazandı. Atılan Zarlar:\n{}: {}\n{}: {}".format(tur1[i][j+1],tur1[i][j],zar1[i][j],tur1[i][j+1],zar1[i][j+1]))
print("\n Yarı Final Turuna Geçmeye Hak Kazanan Oyuncular: ",tur2,"\n")
tur2=np.array(tur2).reshape(2,2)
zar2 = (np.random.randint(1,7,4))
zar2 = zar2.reshape(2,2)
for i in range(2):
  for j in range(1):
    if zar1[i][j] > zar1[i][j+1]:
      tur3.append(tur2[i][j])
      print("{} turu kazandı. Atılan Zarlar:\n{}: {}\n{}: {}".format(tur2[i][j],tur2[i][j],zar2[i][j],tur2[i][j+1],zar2[i][j+1]))
    else:
      tur3.append(tur2[i][j+1])
      print("{} turu kazandı. Atılan Zarlar:\n{}: {}\n{}: {}".format(tur2[i][j+1],tur2[i][j],zar2[i][j],tur2[i][j+1],zar2[i][j+1]))
print("\nFinal Turuna Geçmeye Hak Kazanan Oyuncular: ",tur3,"\n")
tur3=np.array(tur3)
zar3 = (np.random.randint(1,7,2))
for i in range(1):
  if zar3[i] > zar3[i+1]:
    kazanan.append(tur3[i])
    print("{} turu kazandı. Atılan Zarlar:\n{}: {}\n{}: {}".format(tur3[i],tur3[i],zar3[i],tur3[i+1],zar3[i+1]))
  else:
    kazanan.append(tur3[i+1])
    print("{} turu kazandı. Atılan Zarlar:\n{}: {}\n{}: {}".format(tur3[i+1],tur3[i],zar3[i],tur3[i+1],zar3[i+1]))
print("\nYarışmayı Kazanan Oyuncu: ",kazanan)

Tam olarak nasıl bir fikir almak istiyorsunuz forum üyelerinden ?

1 Beğeni

Son attığım kod da berabere kalınca sıkıntı veriyor ve
1.tur

  1. masa: 1. & 2. oyuncu: Atılan zarlar sırasıyla 2 ve 5, kazanan 2. oyuncu

  2. masa: 3. & 4. oyuncu: Atılan zarlar sırasıyla 6 ve 1, kazanan 3. oyuncu

  3. masa: 5. & 6. oyuncu: Atılan zarlar sırasıyla 3 ve 2, kazanan 5. oyuncu

  4. masa: 7. & 8. oyuncu: Atılan zarlar sırasıyla 2 ve 1, kazanan 7. oyuncu

2.tur

  1. masa 2. oyuncu & 3.oyuncu: Atılan zarlar sırasıyla 2 ve 5, kazanan 3. oyuncu

  2. masa 5. oyuncu & 7.oyuncu: Atılan zarlar sırasıyla 6 ve 1, kazanan 5. oyuncu

3.tur

  1. masa 3.oyuncu & 5.oyuncu: Atılan zarlar sırasıyla 1 ve 3, kazanan 5. oyuncu

Sonuç:

Kazanan 5.oyuncu
şu tarza benzer bir çıktı almak istiyorum turnuvayı yapıp kodlar ile ilgili fikir almak istiyorum

Berabere olan durumu kontrol etmek için oyuncu değişkenlerinin str ya da int değerlerinin if koşulu ile aynı olup olmadığına bakarak bunu bir döngü içerisine alıp eğer berabere bittiyse bunu if kontrol eder ve aynı kişileri tekrar zar attırır. Taki biri kazanana kadar. Bu söylediklerimi kod haline yazarak kontrol edebilirsiniz.

Şöyle bir kod yazdım bir bakın isterseniz. Oyuncular önce rastgele olarak gruplandırılıyor. Ancak dilerseniz random parametresini False yaparak sıraya göre de gruplandırabilirsiniz… Daha sonraki gruplandırmalar ise ilk oluşturulan random düzene göre sırayla yapılıyor. Yani ilk maçın galibi ile ikinci maçın galibi eşleşiyor. Ancak yine dilerseniz bu gruplamayı random parametresini True yaparak rastgele yapabilirsiniz.

from random import randint, choice


def group_players(players: list = [], random: bool = False) -> list:
    print("Oyuncular gruplandırılıyor.\nGruplar:\n")
    groupings = []
    if not random:
        n = 0
        for i in range(len(players) // 2):
            groupings.append([players[n], players[n + 1]])
            n += 2
            print(groupings[i])
        print()
    else:
        groupings.extend([[] for _ in range(len(players) // 2)])
        for i in range(len(groupings)):
            for j in range(2):
                player = choice(players)
                players.remove(player)
                groupings[i].append(player)
            print(groupings[i])
        print()
    return groupings


def match(group: list = []) -> str:
    print(f"{group[0]} ve {group[1]}'nin maçı başladı.")
    results = {}
    for i in group:
        dice = randint(a=1, b=6)
        print(f"{i} oyuncusunun attığı zar {dice}")
        results[dice] = i
    if len(results.keys()) == 1:
        print("Maç berabere bitti ve tekrar oynanacak.")
        return match(group=group)
    else:
        winner = results[max(results.keys())]
        print(f"Maç bitti. Kazanan: {winner}\n")
        return winner


def tournament(players: list = [], random: bool = False) -> None:
    remained_players = [
        match(group=group)
        for group in group_players(players=players, random=random)
    ]
    if len(remained_players) == 1:
        print(f"Turnuvayı kazanan oyuncu: {remained_players[0]}")
    else:
        return tournament(players=remained_players, random=False)


if __name__ == "__main__":
    tournament(
        players=["A", "B", "C", "D", "E", "F", "G", "H"],
        random=True
    )

Çıktı:

Oyuncular gruplandırılıyor.
Gruplar:

['D', 'F']
['B', 'G']
['C', 'A']
['E', 'H']

D ve F'nin maçı başladı.
D oyuncusunun attığı zar 4
F oyuncusunun attığı zar 5
Maç bitti. Kazanan: F

B ve G'nin maçı başladı.
B oyuncusunun attığı zar 2
G oyuncusunun attığı zar 1
Maç bitti. Kazanan: B

C ve A'nin maçı başladı.
C oyuncusunun attığı zar 3
A oyuncusunun attığı zar 3
Maç berabere bitti ve tekrar oynanacak.
C ve A'nin maçı başladı.
C oyuncusunun attığı zar 6
A oyuncusunun attığı zar 4
Maç bitti. Kazanan: C

E ve H'nin maçı başladı.
E oyuncusunun attığı zar 4
H oyuncusunun attığı zar 2
Maç bitti. Kazanan: E

Oyuncular gruplandırılıyor.
Gruplar:

['F', 'B']
['C', 'E']

F ve B'nin maçı başladı.
F oyuncusunun attığı zar 5
B oyuncusunun attığı zar 2
Maç bitti. Kazanan: F

C ve E'nin maçı başladı.
C oyuncusunun attığı zar 2
E oyuncusunun attığı zar 3
Maç bitti. Kazanan: E

Oyuncular gruplandırılıyor.
Gruplar:

['F', 'E']

F ve E'nin maçı başladı.
F oyuncusunun attığı zar 5
E oyuncusunun attığı zar 5
Maç berabere bitti ve tekrar oynanacak.
F ve E'nin maçı başladı.
F oyuncusunun attığı zar 3
E oyuncusunun attığı zar 3
Maç berabere bitti ve tekrar oynanacak.
F ve E'nin maçı başladı.
F oyuncusunun attığı zar 6
E oyuncusunun attığı zar 3
Maç bitti. Kazanan: F

Turnuvayı kazanan oyuncu: F
4 Beğeni