Cadou de Craciun
import random
import sys
import time
# generate numbers from 1 to 30 mapped to red color
NUMBERS = {number: 'red' for number in list(range(1, 31))}
class Colors:
"""
ANSI color codes.
"""
# RED is used for all the numbers
RED = '\033[91m'
# GREEN is used for displaying computer's random
# chosen number
GREEN = '\033[92m'
# BLUE is used for displaying user's chosen
# number
BLUE = '\033[94m'
END = '\033[0m'
def assign_color_to_number(number, color):
"""
Show ANSI colors in terminal for nicer UX.
"""
if color == 'red':
return f'{Colors.RED}{number}{Colors.END}'
elif color == 'green':
return f'{Colors.GREEN}{number}{Colors.END}'
elif color == 'blue':
return f'{Colors.BLUE}{number}{Colors.END}'
else:
return number
def print_table(numbers):
"""
Print a nice table with colorful numbers wrapped at 5.
"""
print('\n')
for number, color in numbers.items():
number = assign_color_to_number(number, color).ljust(12)
if number % 5 != 0:
print(number, end=' ')
else:
print(number)
print('\n')
def countdown(seconds, user_number):
"""
Let user know how much until the next game.
Arguments:
seconds (int): How many seconds until next game.
user_number (int): User's lucky & chosen number.
"""
print(f"You chose {user_number}. GOOD LUCK!\n\n")
for second in range(seconds, -1, -1):
sys.stdout.write(
f"\r{second} seconds remaining until one number will change its color to green."
)
time.sleep(1)
sys.stdout.flush()
print('\n')
def get_user_number():
"""
Sanitize user's input.
"""
while True:
try:
value = int(input('Please choose a number between 1 and 30: '))
if 30 < value < 1:
print("Please insert a number between 1 and 30!\n")
continue
return value
except ValueError:
print("Please insert a number between 1 and 30!\n")
continue
def play():
print_table(NUMBERS)
user_number = get_user_number()
countdown(5, user_number)
random_number = random.randint(1, 30)
if user_number != random_number:
NUMBERS.update({random_number: 'green', user_number: 'blue'})
print_table(NUMBERS)
print(
f'You did not guess the number. Our number was: {random_number} '
f'and yours was: {user_number}.\n\nGOOD LUCK NEXT TIME'
)
else:
print(
'You guessed it! Congrats! Please fill in the information '
'below in order to receive your prize.\n\n'
)
name = input('Your name: ')
age = input('Your age: ')
email = input('Your email: ')
print(f'Name: {name}\nAge: {age}\nEmail:{email}')
# reset our numbers
NUMBERS.update({random_number: 'red', user_number: 'red'})
def main():
print('\nWELCOME TO LOTTERY!')
while True:
play()
answer = input('Play again? [Y]es/[N]o: ')
if answer.lower() == 'n':
break
print('\nTHANKS FOR PLAYING!')
if __name__ == '__main__':
main()
Aici ai si link cu codu' si poti sa ii dai un Run de test. Am pus si niste comment-uri in caz ca vrei sa intelegi ce se intampla, desi ma indoiesc.
PS: Codu' e scris destul de repede but it does it job chiar daca nu e perfect organizat.
Enjoy