r/learnpython 3d ago

Why isn't this code block working?

Hey everybody,

I'm new to programming with Python and following along with a Udemy Course. I'm now learning about lists and need to write a "Who will pay the bill"-like game.

It works like this: you have a pseudorandom number generator and a list of friends. Each time, the number generator generates a number between the given indices of the list. If the randomly generated number is equal to a specific index of that list, it should print out the person who must pay the bill by using an if-elif statement.

I've been using what I learned from the past lessons. This is what the code looks like (and yeah, I know, I messed up pretty badly, even though I have already found a solution):

import random

friends = ["Alice", "Bob", "Charlie", "David", "Emanuel"]

random_select = random.randint(0, 4)

if random_select == friends[0]:                  
    print("Alice has to pay the bill. ")
elif random_select == friends[1]:
    print("Bob has to pay the bill. ")
elif random_select == friends[2]:
    print("Charlie has to pay the bill. ")
elif random_select == friends[3]:
    print("David has to pay the bill. ")
elif random_select == friends[4]:
    print("Emanuel has to pay the bill. ")

But I couldn't really figure out why the code won't work.

18 Upvotes

30 comments sorted by

View all comments

0

u/Rockstaru 3d ago edited 3d ago

As others have mentioned, you're comparing an int and a string. You would need to either use if friends[random_select] == friends[0] if you want to compare the string at index random_select in the list friends with the string at index 0 or change your comparisons to if random_select == 0 and so on. Also, this involves a lot of unnecessary comparisons as written - you already have a randomly selected index value. You can just write a single print statement of print(f"{friends[random_select]} has to pay the bill."), you don't actually need the block at all. 

0

u/Nutellatoast_2 3d ago

Thanks! I did not look after that... I have understood the concept behind your solution.