Skip to content

Commit a60f7d1

Browse files
committed
Show user nice refactored winner functions
1 parent b9bba6e commit a60f7d1

File tree

2 files changed

+54
-66
lines changed

2 files changed

+54
-66
lines changed

backend/main/chapters/c11_tic_tac_toe_project.py

Lines changed: 36 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -442,41 +442,37 @@ class winner(ExerciseStep):
442442
def winner(board):
443443
...
444444
445+
def winning_line(strings):
446+
piece = strings[0]
447+
if piece == ' ':
448+
return False
449+
for entry in strings:
450+
if piece != entry:
451+
return False
452+
return True
453+
445454
def row_winner(board):
446455
for row in board:
447-
all_equal = True
448-
piece = row[0]
449-
for entry in row:
450-
if entry == ' ' or piece != entry:
451-
all_equal = False
452-
break
453-
if all_equal:
456+
if winning_line(row):
454457
return True
455458
return False
456459
457460
def column_winner(board):
458461
for col in range(len(board[0])):
459-
all_equal = True
460-
piece = board[0][col]
462+
column = []
461463
for row in board:
462-
if row[col] == ' ' or row[col] != piece:
463-
all_equal = False
464-
break
465-
if all_equal:
464+
column.append(row[col])
465+
if winning_line(column):
466466
return True
467467
return False
468468
469469
def diagonal_winner(board):
470-
all_equal1 = True
471-
all_equal2 = True
472-
topleft = board[0][0]
473-
topright = board[0][-1]
470+
diagonal1 = []
471+
diagonal2 = []
474472
for i in range(len(board)):
475-
if board[i][i] == ' ' or board[i][i] != topleft:
476-
all_equal1 = False
477-
if board[i][-i - 1] == ' ' or board[i][-i - 1] != topright:
478-
all_equal2 = False
479-
return all_equal1 or all_equal2
473+
diagonal1.append(board[i][i])
474+
diagonal2.append(board[i][i])
475+
return winning_line(diagonal1) or winning_line(diagonal2)
480476
481477
assert_equal(
482478
winner(
@@ -526,41 +522,37 @@ def diagonal_winner(board):
526522
""")
527523

528524
def solution(self):
525+
def winning_line(strings):
526+
piece = strings[0]
527+
if piece == ' ':
528+
return False
529+
for entry in strings:
530+
if piece != entry:
531+
return False
532+
return True
533+
529534
def row_winner(board):
530535
for row in board:
531-
all_equal = True
532-
piece = row[0]
533-
for entry in row:
534-
if entry == ' ' or piece != entry:
535-
all_equal = False
536-
break
537-
if all_equal:
536+
if winning_line(row):
538537
return True
539538
return False
540539

541540
def column_winner(board):
542541
for col in range(len(board[0])):
543-
all_equal = True
544-
piece = board[0][col]
542+
column = []
545543
for row in board:
546-
if row[col] == ' ' or row[col] != piece:
547-
all_equal = False
548-
break
549-
if all_equal:
544+
column.append(row[col])
545+
if winning_line(column):
550546
return True
551547
return False
552548

553549
def diagonal_winner(board):
554-
all_equal1 = True
555-
all_equal2 = True
556-
topleft = board[0][0]
557-
topright = board[0][-1]
550+
diagonal1 = []
551+
diagonal2 = []
558552
for i in range(len(board)):
559-
if board[i][i] == ' ' or board[i][i] != topleft:
560-
all_equal1 = False
561-
if board[i][-i - 1] == ' ' or board[i][-i - 1] != topright:
562-
all_equal2 = False
563-
return all_equal1 or all_equal2
553+
diagonal1.append(board[i][i])
554+
diagonal2.append(board[i][i])
555+
return winning_line(diagonal1) or winning_line(diagonal2)
564556

565557
def winner(board: List[List[str]]):
566558
return row_winner(board) or column_winner(board) or diagonal_winner(board)

backend/main/tests/test_transcript.json

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15316,41 +15316,37 @@
1531615316
],
1531715317
"page": "Checking the board for winners",
1531815318
"program": [
15319+
"def winning_line(strings):",
15320+
" piece = strings[0]",
15321+
" if piece == ' ':",
15322+
" return False",
15323+
" for entry in strings:",
15324+
" if piece != entry:",
15325+
" return False",
15326+
" return True",
15327+
"",
1531915328
"def row_winner(board):",
1532015329
" for row in board:",
15321-
" all_equal = True",
15322-
" piece = row[0]",
15323-
" for entry in row:",
15324-
" if entry == ' ' or piece != entry:",
15325-
" all_equal = False",
15326-
" break",
15327-
" if all_equal:",
15330+
" if winning_line(row):",
1532815331
" return True",
1532915332
" return False",
1533015333
"",
1533115334
"def column_winner(board):",
1533215335
" for col in range(len(board[0])):",
15333-
" all_equal = True",
15334-
" piece = board[0][col]",
15336+
" column = []",
1533515337
" for row in board:",
15336-
" if row[col] == ' ' or row[col] != piece:",
15337-
" all_equal = False",
15338-
" break",
15339-
" if all_equal:",
15338+
" column.append(row[col])",
15339+
" if winning_line(column):",
1534015340
" return True",
1534115341
" return False",
1534215342
"",
1534315343
"def diagonal_winner(board):",
15344-
" all_equal1 = True",
15345-
" all_equal2 = True",
15346-
" topleft = board[0][0]",
15347-
" topright = board[0][-1]",
15344+
" diagonal1 = []",
15345+
" diagonal2 = []",
1534815346
" for i in range(len(board)):",
15349-
" if board[i][i] == ' ' or board[i][i] != topleft:",
15350-
" all_equal1 = False",
15351-
" if board[i][-i - 1] == ' ' or board[i][-i - 1] != topright:",
15352-
" all_equal2 = False",
15353-
" return all_equal1 or all_equal2",
15347+
" diagonal1.append(board[i][i])",
15348+
" diagonal2.append(board[i][i])",
15349+
" return winning_line(diagonal1) or winning_line(diagonal2)",
1535415350
"",
1535515351
"def winner(board):",
1535615352
" return row_winner(board) or column_winner(board) or diagonal_winner(board)"

0 commit comments

Comments
 (0)