import random

artists_listeners = {
'$NOT': 7781046,
'21 Savage': 60358167,
'9lokknine': 1680245,
'A Boogie Wit Da Hoodie': 18379137,
'Ayo & Teo': 1818645,
'Bhad Bhabie': 1915352,
'Blueface': 4890312,
'Bobby Shmurda': 2523069,
'Cardi B': 30319082,
'Central Cee': 22520846,
'Chief Keef': 9541580,
'Coi Leray': 28619269,
'DaBaby': 30353214,
'DDG ': 4422588,
'Denzel Curry': 755542,
'Desiigner': 5586908,
'Don Toliver': 27055150,
'Dusty Locane': 3213566,
'Est Gee': 5916299,
'Famous Dex': 2768895,
'Fivio Foreign ': 9378678,
'Fredo Bang': 1311960,
'Future': 47165975,
'Gazo': 5342471,
'GloRilla': 6273110,
'Gunna ': 23998763,
'Hotboii': 1816019,
'Iann Dior': 14092651,
'J. Cole': 36626203,
'JayDaYoungan': 1415050,
'Juice WRLD ': 31818659,
'Key Glock': 10397097,
'King Von': 7608559,
'Kodak Black': 24267064,
'Latto': 10943008,
'Lil Baby': 30600740,
'Lil Durk': 20244848,
'Lil Keed': 2288807,
'Lil Loaded': 2130890,
'Lil Mabu': 2886517,
'Lil Mosey': 8260285,
'Lil Peep': 15028635,
'Lil Pump': 7530070,
'Lil Skies': 4895628,
'Lil Tecca': 13070702,
'Lil Tjay': 19119581,
'Lil Uzi Vert ': 3538351,
'Lil Wayne': 32506473,
'Lil Xan': 2590180,
'Lil Yachty': 11932163,
'Machine Gun Kelly': 13883363,
'Megan Thee Stallion ': 23815306,
'Moneybagg Yo': 11361158,
'NLE Choppa ': 17472472,
'NoCap': 1030289,
'Offset': 15069868,
'Playboi Carti': 16406109,
'PnB Rock': 5127907,
'Polo G': 24374576,
'Pooh Shiesty': 4833055,
'Pop Smoke': 24438919,
'Quando Rondo': 1511549,
'Quavo': 15944317,
'Rod Wave ': 8037875,
'Roddy Ricch': 22317355,
'Russ Millions ': 6089378,
'Ski Mask The Slump God': 9417485,
'Sleepy Hallow': 8794484,
'Smokepurpp': 2377384,
'Soulja Boy': 10269586,
'SpottemGottem': 1421927,
'Takeoff': 9756119,
'Tay-K': 4449331,
'Tee Grizzley': 4052375,
'Travis Scott': 46625716,
'Trippie Redd': 19120728,
'Waka Flocka Flame': 5679474,
'XXXTENTACION': 35627974,
'YBN Nahmir ': 4361289,
'YK Osiris': 1686619,
'YNW Melly ': 8782917,
'YounBoy Never Broke Again': 18212921,
'Young M.A': 2274306,
'Young Nudy': 7553116,
'Young Thug': 28887553,
'Yungeen Ace': 1294188,
}

keys = list(artists_listeners.keys())

score = 0

while True:
  first_artist = random.choice(keys)
  second_artist = random.choice(keys)

  while first_artist == second_artist:
    second_artist = random.choice(keys)

  while True:
    guess = input(f"\nWhich artist has more monthly Spotify listeners - 1. {first_artist.title()} or 2. {second_artist.title()}? ")
    guess_lower = guess.strip().lower()

    if guess_lower == 'quit':
      print("Thanks for playing!")
      quit()

    elif guess_lower != first_artist.lower() and guess_lower != second_artist.lower():
      print("Invalid input. Please enter the name of one of the two artists or 'quit' to end the game.")

    elif guess_lower == first_artist.lower() and artists_listeners[first_artist] > artists_listeners[second_artist]:
      print(f"You guessed correctly! {first_artist.title()} had {int(artists_listeners[first_artist] / 1e6):,}M monthly Spotify listeners and {second_artist.title()} has {int(artists_listeners[second_artist] / 1e6):,}M monthly Spotify listeners.")
      score += 1
      break

    elif guess_lower == second_artist.lower() and artists_listeners[second_artist] > artists_listeners[first_artist]:
      print(f"You guessed correctly! {second_artist.title()} had {int(artists_listeners[second_artist] / 1e6):,}M monthly Spotify listeners and {first_artist.title()} has {int(artists_listeners[first_artist] / 1e6):,}M monthly Spotify listeners.")
      score += 1
      break

else:
 print(f"\nSorry, you guessed incorrectly. {first_artist.title()} had {int(artists_listeners[first_artist] / 1e6):,}M monthly Spotify listeners and {second_artist.title()} has {int(artists_listeners[second_artist] / 1e6):,}M monthly Spotify listeners.\n")
score = 0
first_artist = random.choice(keys) # Generate new artists
second_artist = random.choice(keys)
while first_artist == second_artist:
 second_artist = random.choice(keys)
play_again = input("Would you like to play again? (y/n) ")
if play_again.lower() == 'n':
 print("Thanks for playing!")
quit()

print(f"\nYour score is {score}.")  

now the game just repeats the question after making a mistake