Skip to content

Chapter 7 error after adding outcome.get  #9

@BatF0x

Description

@BatF0x

Hey, I keep getting this issue when I add outcome.get, It points out to,

main() at the bottom of the script
function play_game(player, player2) in main
roll1 = get_roll(player_1, roll_names) in play_game
return rolls[selected_index]

my version of python is 3.8

`import random

rolls = {
'rock': {
'defeats': ['scissors'],
'defeated_by': ['paper']
},
'paper': {
'defeats': ['rock'],
'defeated_by': ['scissors']
},
'scissors': {
'defeats': ['paper'],
'defeated_by': ['rock']
},
}

def main():
show_header()

player = "You"
player2 = "Computer"

play_game(player, player2)

def show_header():
print("------------------------")
print(" Rock, Paper, Scissors v2")
print(" Data Structures Edition")
print("------------------------")

def play_game(player_1, player_2):
rounds = 3
wins_p1 = 0
wins_p2 = 0

roll_names = list(rolls.keys())

while wins_p1 < rounds and wins_p2 < rounds:
    roll1 = get_roll(player_1, roll_names)
    roll2 = random.choice(roll_names)

    if not roll1:
        print("try again")
        continue

    print(f"{player_1} rolls {roll1}")
    print(f"{player_2} rolls {roll2}")

    # test for a winner
    winner = check_for_winner(player_1, player_2, roll1, roll2)

    print("The end of the Round")
    if winner is None:
        print("It was a tie!")
    else:
        print(f"{winner} is the winner of the round!!!")
        if winner == player_1:
            wins_p1 += 1
        elif winner == player_2:
            wins_p2 += 1

    print(f"Score is {player_1}: {wins_p1} and {player_2}: {wins_p2}")

if wins_p1 >= rounds:
    overall_winner = player_1
else:
    overall_winner = player_2

print(f"{overall_winner} wins the game!")

# Rock
#   Rock -> tie
#   Paper -> lose
#   Scissor -> win
# Paper
#   Rock -> win
#   Paper -> tie
#   Scissor -> lose
# Scissor
#   Rock -> lose
#   Paper -> win
#   Scissor -> tie

def check_for_winner(player_1, player_2, roll1, roll2):
winner = None
if roll1 == roll2:
print("It's a tie!")

outcome = rolls.get(roll1, {})
if roll2 in outcome.get('defeats'):
    return player_1
elif roll2 in outcome.get('defeated_by'):
    return player_2
return winner

def get_roll(player_name, roll_names):
print("Available rolls:")
for index, r in enumerate(roll_names, start=1):
print(f"{index}. {r}")

text = input(f"{player_name} what is your roll? : ")
selected_index = int(text) - 1

if selected_index < 0 or selected_index >= len(rolls):
    print(f"sorry {player_name}, {text} is not a vaild play!")
    return None

return rolls[selected_index]

if name == 'main':
main()
`

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions