• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Python warunek w ifie

Object Storage Arubacloud
0 głosów
215 wizyt
pytanie zadane 27 lutego 2023 w Python przez niezalogowany

Nie wiem dlaczego warunek w podanym kodzie jest prawdziwy co skutkuje wykonaniem instrukcji break.

Przecież X lub O nie równa się 0.

 

import random as r

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

def table():
	print(game[0])
	print(game[1])
	print(game[2])


def computer(result,p_c = "X",n = 0,num = 0):
	if n:
		num = int(input("Podaj pozycje z zakresu 1-9"))

	if num-n <= 2:
		if game[0][num-n] == 0:
			game[0][num-n] = p_c
			result = False
			

	elif num-n <= 5:
		if num-n == 3:
			if game[1][0] == 0:
				game[1][0] = p_c
				result = False

		elif num-n == 4:
			if game[1][1] == 0:
				game[1][1] = p_c
				result = False
		else:
			if game[1][2] == 0:
				game[1][2] = p_c
				result = False
	
	elif num-n <= 8:
		if num-n == 6:
			if game[2][6] == 0:
				game[2][6] = p_c
				result = False
		elif num-n == 7:
			if game[2][7] == 0:
				game[2][7] = p_c
				result = False
		else:
			if game[2][8] == 0:
				game[2][8] = p_c
				result = False
			
		



print("Witaj w grze O i X")
while True:
	if (game[0][0] and game[0][1] and game[0][2] == "X" or "O") or (game[1][0] and game[1][1] and game[1][2] == "X" or "O") or (game[2][0] and game[2][1] and game[2][2] == "X" or "O") or (game[0][0] and game[1][0] and game[2][0] == "X" or "O") or(game[0][1] and game[1][1] and game[2][1] == "X" or "O") or (game[0][2] and game[1][2] and game[2][2] == "X" or "O") or (game[0][0] and game[1][1] and game[2][2] == "X" or "O") or (game[0][2] and game[1][1] and game[2][0] == "X" or "O"):
		break
	a = True
	b =True
	c = True
	table()
	while a == True:
		computer(a,"O",1)
	
	table()
	while b == True:
		computer(b,r.randint(range(9),1))
	table()
	while c == True:
		computer(c,"O",1)
	table()
	
print("Koniec Gry")
table()

 

2 odpowiedzi

0 głosów
odpowiedź 27 lutego 2023 przez tangarr Mędrzec (154,780 p.)

o.O

game[0][0] and game[0][1] and game[0][2] == "X" or "O"

Ten warunek oznacza

Wartość game[0][0] jest różny od zero/null
oraz (Wartość game[0][1] jest różna od zero/null
      oraz (
          Wartość game[0][2] jest równa "X"
          lub
          "O" jest różne od zero/null
          )
     )

Jeżeli zmienne game[0][0] i game[0][1] mają ustawione niezerowe wartości to dwa pierwsze warunki są spełnione. Wartość zmiennej game[0][2] nie ma znaczenia ponieważ łańcuch "O" ma "niezerową" wartość.

komentarz 27 lutego 2023 przez niezalogowany
Więc jaki warunek powinienem napisać?
komentarz 27 lutego 2023 przez tangarr Mędrzec (154,780 p.)
A jaki efekt chcesz uzyskać?
komentarz 27 lutego 2023 przez niezalogowany
Chcę aby warunek się spełniał jak w liście game pod danymi indeksami będzie wartość X lub O.
1
komentarz 27 lutego 2023 przez tangarr Mędrzec (154,780 p.)

Jesteś bardzo nieprecyzyjny. Musisz nad tym popracować.
Biorąc twoje słowa dosłownie: chcesz sprawdzić czy wybrane pola nie są puste.
Aby sprawdzić czy wszystkie pola w pierwszym wierszu są wypełnione użyj warunku

(game[0][0] == "X" or game[0][0] == "O")
and 
(game[0][1] == "X" or game[0][1] == "O")
and 
(game[0][2] == "X" or game[0][2] == "O")

Jednak podejrzewam, że chciałeś sprawdzić czy któryś z graczy wygrał. Wtedy warunek powinien wyglądać

(game[0][0] == "X" or game[0][0] == "O")
and
game[0][0] == game[0][1] 
and 
game[0][0] == game[0][2]

 

0 głosów
odpowiedź 28 lutego 2023 przez VBService Ekspert (252,740 p.)
edycja 28 lutego 2023 przez VBService

Za pomocą np. any można warunek dla wierszy zapisać np. tak

if  any(r == ['O']*3 or r == ['X']*3 for r in game):

a połączenie any i all pozwala na sprawdzenie kolumn

if any(all(game[r][c] == s for r in range(3)) for s in ['O','X'] for c in range(3)):

 

razem wiersze i kolumny (przykład pomija "po przekątnych")

[ on-line ]

if  any(r == ['O']*3 or r == ['X']*3 for r in game) or \
    any(all(game[r][c] == s for r in range(3)) for s in ['O','X'] for c in range(3)):

 

Podobne pytania

0 głosów
1 odpowiedź 586 wizyt
0 głosów
1 odpowiedź 258 wizyt
pytanie zadane 16 kwietnia 2022 w Python przez niezalogowany
0 głosów
5 odpowiedzi 743 wizyt
pytanie zadane 19 marca 2016 w C i C++ przez luparuwka Początkujący (400 p.)

92,551 zapytań

141,393 odpowiedzi

319,522 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...