I have commented out two attributes (in random_number_guesser.py) which I believe are unnecessary.
Am I correct in assuming that, because the code runs correctly without their implementation, they should not be included in my program?
player.py
class Player:
def __init__(self) -> None:
"""Initializes the player object's attributes."""
self.wins = 0
def create_username(self) -> None:
"""Prompts the player to enter their username."""
attempts = 1
MAX_ATTEMPTS = 3
while attempts <= MAX_ATTEMPTS:
self.username = input("What is your name?: ")
# Checks if the username contains only whitespace.
if not self.username.strip():
if attempts == MAX_ATTEMPTS:
self.username = "Player_1"
else:
print()
print("Your username must contain at least one character.")
else:
self.username = self.username.strip()
break
attempts += 1
def __str__(self) -> str:
"""Returns the player's username as a string."""
return self.username
def get_guess(self) -> int:
"""Returns the player's guess as an integer."""
while True:
try:
self.guess = int(input("Can you guess what it is?: "))
return self.guess
except ValueError:
print()
print("Please enter a whole number.")
def add_win(self) -> None:
"""Adds a win to the player's win count."""
self.wins += 1
random_number_guesser.py
from player import Player
import random
class RandomNumberGuesser:
def __init__(self) -> None:
"""Initializes the game object's attributes."""
#self.player: Player | None = None
#self.winning_number: int | None = None
def create_player(self) -> None:
"""Creates a new player object."""
self.player = Player()
self.player.create_username()
def greet_player(self) -> None:
"""Greets the player."""
print(f"Welcome, {self.player}!")
def generate_random_number(self) -> None:
"""Generates a winning number."""
MIN = 1
MAX = 10
self.winning_number = random.randint(MIN, MAX)
print()
#DEBUG - Displays the winning number:
#print(f"The winning number is: {self.winning_number}.")
print("I'm thinking of a number between 1 & 10.")
def guess_and_check(self) -> None:
"""Compares the player's guess to the winning number."""
# Checks if the player's guess is correct.
if self.player.get_guess() == self.winning_number:
print()
print(f"{self.player} Won!")
self.player.add_win()
else:
print()
print(f"{self.player} Lost!")
def play_again(self) -> None:
"""Determines whether or not the player wants to play again."""
while True:
play_again = input("Would you like to play again? (y/n): ")
# Checks if the player wants to play again & handles invalid inputs.
if play_again == "y":
self.generate_random_number()
self.guess_and_check()
elif play_again == "n":
print()
# Checks the player's win count and determines if 'time' or 'times' should be used.
if self.player.wins == 1:
print(f"{self.player} won {self.player.wins} time!")
else:
print(f"{self.player} won {self.player.wins} times!")
break
else:
print()
print("Please enter either 'y' or 'n'.")
def play_random_number_guesser() -> None:
print("Welcome To Random Number Guesser!")
print("=================================")
game = RandomNumberGuesser()
game.create_player()
game.greet_player()
game.generate_random_number()
game.guess_and_check()
game.play_again()
game.py
from random_number_guesser import *
if __name__ == "__main__":
play_random_number_guesser()