Optimal coding requires the thinking of flexible, reusable and scalable. Breaking down the codes to small unit that is meant to do one thing and do that one thing very well, no side effects if you do certain variation.
Using a number guessing snippet that one will easily write up but not optimal, a pro ought to transform that into the following class form codes:
class GuessNumber:
def __init__(self, number, mn=0, mx=100):
self.number = number
self.guesses = 0
self.min = mn
self.max = mx
def get_guess(self):
guess = input(f'please guess a number ({self.min} - {self.max}): ')
if self.valide_number(guess):
return int(guess)
else:
print("please enter a valid number.")
return self.get_guess()
def valid_number(self, str_number):
try:
number = int(str_number)
except:
return False
return self.min <= number <= self.max
def play(self):
while True:
self.guesses += 1
guess = self.get_guess()
if guess < self.number:
print("you guess was under.")
elif guess > self.number:
print("your guess was over."
else:
break
print(f"you guessed it in (self.guesses) guesses."
game = GuessNumber(56, 0, 100)
game.play()
Compared to the rigid easy written-up:

This is learned from Tech with Tim and the book he recommend is “Practices of the Python Pro” by Dane Hillard.