Function Variable - Programmers Heaven

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

Function Variable

Garrett85Garrett85 Posts: 168Member
In the follwoing program I am having trouble understanding this function.
[code]
def ask_yes_no(question):
"""Ask a yes or no question."""
response = None
while response not in ("y", "n"):
response = raw_input(question).lower()
return response[/code]

Shouldn't question be response, or response be question? I know thought question was just a variable that held that date sent to the function.

[code]# Tic-Tac-Toe
# Plays the game of tic-tac-toe against a human opponent

# global constants
X = "X"
O = "O"
EMPTY = " "
TIE = "TIE"
NUM_SQUARES = 9


def display_instruct():
"""Display game instructions."""
print
"""
Welcome to the greatest intellectual challenge of all time: Tic-Tac-Toe.
This will be a showdown between your human brain and my silicon processor.

You will make your move known by entering a number, 0 - 8. The number
will correspond to the board position as illustrated:

0 | 1 | 2
---------
3 | 4 | 5
---------
6 | 7 | 8

Prepare yourself, human. The ultimate battle is about to begin.

"""


def ask_yes_no(question):
"""Ask a yes or no question."""
response = None
while response not in ("y", "n"):
response = raw_input(question).lower()
return response


def ask_number(question, low, high):
"""Ask for a number within a range."""
response = None
while response not in range(low, high):
response = int(raw_input(question))
return response


def pieces():
"""Determine if player or computer goes first."""
go_first = ask_yes_no("Do you require the first move? (y/n): ")
if go_first == "y":
print "
Then take the first move. You will need it."
human = X
computer = O
else:
print "
Your bravery will be your undoing... I will go first."
computer = X
human = O
return computer, human


def new_board():
"""Create new game board."""
board = []
for square in range(NUM_SQUARES):
board.append(EMPTY)
return board


def display_board(board):
"""Display game board on screen."""
print "
", board[0], "|", board[1], "|", board[2]
print " ", "---------"
print " ", board[3], "|", board[4], "|", board[5]
print " ", "---------"
print " ", board[6], "|", board[7], "|", board[8], "
"


def legal_moves(board):
"""Create list of legal moves."""
moves = []
for square in range(NUM_SQUARES):
if board[square] == EMPTY:
moves.append(square)
return moves


def winner(board):
"""Determine the game winner."""
WAYS_TO_WIN = ((0, 1, 2),
(3, 4, 5),
(6, 7, 8),
(0, 3, 6),
(1, 4, 7),
(2, 5, 8),
(0, 4, 8),
(2, 4, 6))

for row in WAYS_TO_WIN:
if board[row[0]] == board[row[1]] == board[row[2]] != EMPTY:
winner = board[row[0]]
return winner

if EMPTY not in board:
return TIE

return None


def human_move(board, human):
"""Get human move."""
legal = legal_moves(board)
move = None
while move not in legal:
move = ask_number("Where will you move? (0 - 8):", 0, NUM_SQUARES)
if move not in legal:
print "
That square is already occupied, foolish human. Choose another.
"
print "Fine..."
return move


def computer_move(board, computer, human):
"""Make computer move."""
# make a copy to work with since function will be changing list
board = board[:]
# the best positions to have, in order
BEST_MOVES = (4, 0, 2, 6, 8, 1, 3, 5, 7)

print "I shall take square number",

# if computer can win, take that move
for move in legal_moves(board):
board[move] = computer
if winner(board) == computer:
print move
return move
# done checking this move, undo it
board[move] = EMPTY

# if human can win, block that move
for move in legal_moves(board):
board[move] = human
if winner(board) == human:
print move
return move
# done checkin this move, undo it
board[move] = EMPTY

# since no one can win on next move, pick best open square
for move in BEST_MOVES:
if move in legal_moves(board):
print move
return move


def next_turn(turn):
"""Switch turns."""
if turn == X:
return O
else:
return X


def congrat_winner(the_winner, computer, human):
"""Congratulate the winner."""
if the_winner != TIE:
print the_winner, "won!
"
else:
print "It's a tie!
"

if the_winner == computer:
print "As I predicted, human, I am triumphant once more.
"
"Proof that computers are superior to humans in all regards."

elif the_winner == human:
print "No, no! It cannot be! Somehow you tricked me, human.
"
"But never again! I, the computer, so swears it!"

elif the_winner == TIE:
print "You were most lucky, human, and somehow managed to tie me.
"
"Celebrate today... for this is the best you will ever achieve."


def main():
display_instruct()
computer, human = pieces()
turn = X
board = new_board()
display_board(board)

while not winner(board):
if turn == human:
move = human_move(board, human)
board[move] = human
else:
move = computer_move(board, computer, human)
board[move] = computer
display_board(board)
turn = next_turn(turn)

the_winner = winner(board)
congrat_winner(the_winner, computer, human)


# start the program
main()
raw_input("

Press the enter key to quit.")[/code]

Comments

Sign In or Register to comment.