If you have any questions, comments or issues with this project please post them here!

hi guys! iâ€™m struggling with day 44 exercise. the error iâ€™m getting is â€ślist index out of rangeâ€ť on line 39.

could someone help me out please?

```
print("--- David's Nan Bingo Card Generator ---")
print()
import random, os, time
bingo = []
def ran():
number = random.randint(1,90)
return number
def prettyprint():
for row in bingo:
for item in row:
print(item, end ="\t|\t")
print()
def createCard():
global bingo
numbers = []
for i in range(8):
num = ran()
while num in numbers:
num = ran()
numbers.append(ran())
numbers.sort()
bingo = [ [numbers[0], numbers[1], numbers[2]],
[numbers [3], "BINGO", numbers [4]],
[numbers[5], numbers[6], numbers[7]]
]
createCard()
while True:
prettyprint()
num = int(input("next number: "))
for row in range(3):
for item in range(3):
if bingo[row][item] == num:
bingo[row][item] = "X"
exes = 0
for row in bingo:
for item in row:
if item == "X":
exes += 1
if exes == 8:
print ("you win")
break
time.sleep(1)
os.system("clear")
```

This is an example of why formatting code correctly is so important, not only does it make it look nice and easier to read for others (and yourself), bad formatting, like in this case, can sometimes be the cause of bugs (especially since Python syntex uses whitespaces).

This works fine:

```
print("--- David's Nan Bingo Card Generator ---")
print()
import random, os, time
bingo = []
def ran():
number = random.randint(1, 90)
return number
def prettyprint():
for row in bingo:
for item in row:
print(item, end="\t|\t")
print()
def createCard():
global bingo
numbers = []
for i in range(8):
num = ran()
while num in numbers:
num = ran()
numbers.append(ran())
numbers.sort()
bingo = [[numbers[0], numbers[1], numbers[2]],
[numbers[3], "BINGO", numbers[4]],
[numbers[5], numbers[6], numbers[7]]]
createCard()
while True:
prettyprint()
num = int(input("next number: "))
for row in range(3):
for item in range(3):
if bingo[row][item] == num:
bingo[row][item] = "X"
exes = 0
for row in bingo:
for item in row:
if item == "X":
exes += 1
if exes == 8:
print("you win")
break
time.sleep(1)
os.system("clear")
```

Hi there!

Could someone please explain why I cannot do this when looking for a number in my bingo card and replace it with â€śXâ€ť

```
for row in bingolist:
for item in row:
if bingolist[row][item] == number:
bingolist[row][item] = "X"
Xs += 1
```

Iâ€™ve seen Iâ€™m supposed to use range(3), which makes sense but doesnâ€™t look natural to me. It means you need to know the number of rows and items in your list when replacing an item?

Have a nice day!

A `for in`

loop in Python iterates through **items**, not **indexes**, so `bingolist[row][item]`

will likely throw an error since youâ€™ll be trying to access something like `bingolist[[ 83, 24, 37 ]][37]`

. Check this out on W3Schools (I recommend trying the `Try it yourself`

code as youâ€™ll get a better understanding of what I mean).

Hi everyone! Iâ€™ve never seen the â€śglobalâ€ť in â€śglobal bingoâ€ť and David didnâ€™t really touch on it in the video explanation. Can someone explain what it does? I couldnâ€™t figure this challenge at all. I started with the previous dayâ€™s code plus the hangman code thinking I could use a â€śallBingo = Trueâ€ť to do the X replacing but it didnâ€™t work out. Anyways, thank for the help!

Hi @laurenjane thanks for your message and apologies for the delay in responding to you. Can you please share a link to your Repl so I can explain using your code?

regarding the solution. i didnâ€™t understand what the â€śwhile num in numbers:â€ť in the createCard subroutine did, so i thought about it.

```
def createCard():
global bingo
numbers = []
for i in range(8):
num = ran()
while num in numbers:
num = ran()
numbers.append(ran())
```

it took me a while to understand that it is supposed to prevent repetition of numbers, but doesnâ€™t work. (tested via reduction of the range of the random numbers generated). it took another while for me to realize why:

```
numbers.append(ran())
```

should have been

```
numbers.append(num)
```

I was struggling and looked at the solution and I saw the global function which has not been used before. Can I know what it does?

Basically it changes the variable globally. Hereâ€™s a longer explanation:

Hi

I have basically managed to make the whole game, however my counter system and breaking out of the loop to finish the game wonâ€™t work for some reason. I cross-referenced with the provided solution but for some reason I canâ€™t get it to work.

```
import random, time, os
bingoCard = []
numbers = []
while len(numbers) < 8:
i = random.randint(0,90)
if i not in numbers:
numbers.append(i)
numbers.sort()
bingoCard = [ [numbers[0], numbers[1], numbers[2]],
[numbers[3], "BINGO", numbers[4]],
[numbers[5], numbers[6], numbers[7]] ]
def printCard():
for row in bingoCard:
for number in row:
print(number, end=' | ')
print()
while True:
print ("David's Nan's Bingo Card Generator")
print()
printCard()
print()
num = int(input("input number: "))
for row in range(3):
for item in range(3):
if bingoCard[row][item] == num:
bingoCard[row][item] = "X"
counter = 0
for row in bingoCard:
for item in row:
if item == "x":
counter+=1
if counter == 8:
print("You won")
break
time.sleep(0.1)
os.system("clear")
```

I think it might be that in your counter section, you have item == â€śxâ€ť, but earlier you have bingoCard[row][item]= â€śXâ€ť. the computer will read â€śxâ€ť and â€śXâ€ť as different things.

Oh, that was a stupid mistake lol

Thanks

Please help! I donâ€™t understand why my card is printing out multiple times once a number is entered.

https://replit.com/@KristineCody/Nans-Bingo-Game-Day-44#main.py Any input is welcome! TIA

```
import random, time, os
row1=[]
row2=[]
row3=[]
numbers=[]
card=[]
def prettyPrint():
print()
for row in card:
for item in row:
print(f"{item:^10}", end =" | ")
print()
print()
def createCard():
for i in range(3):
row1.append(numbers[i])
for i in range(3,6):
row2.append(numbers[i])
for i in range (6,9):
row3.append(numbers[i])
row2[1] = "BINGO"
card.append(row1)
card.append(row2)
card.append(row3)
x=0
print("\033[34mDavid's Nan's BINGO Game\033[0m")
for i in range (9):
num = random.randint(1, 100)
if num not in numbers:
numbers.append(num)
numbers.sort()
#createCard()
#prettyPrint()
while True:
if x!=8:
createCard()
prettyPrint()
caller = int(input("Next Number: "))
for i in range(len(numbers)):
if caller == numbers[i]:
numbers[i]="X"
x+=1
else:
print("\033[35mBINGO!")
```

I suspect your error is that youâ€™re re-creating the card, try this instead:

```
createCard()
#prettyPrint()
while True:
if x!=8:
#createCard()
prettyPrint()
```

**Question:**

How to create 8 random numbers without any doubles and put them into a list. The code in lession day 44 breaks as soon as randint will generate 2 of the same numbers.

**Repl link/Link to where the bug appears:**

https://replit.com/@cbrenner/Day44100Days

**Screenshots, links, or other helpful context:**

If randint makes 2 same numbers, it will only give me 7 numbers in total. When checking the variables in the bingo card Iâ€™ll get an â€śout of rangeâ€ť after, as it expects to have 8 nr. in it.

```
numbers = []
for i in range(8):
value = random.randint(1,90)
while value not in numbers:
numbers.append(value)
numbers.sort()
```

You need to generate a new random number if it is a duplicate.

```
numbers = []
for i in range(8):
value = random.randint(1,90)
while value in numbers:
value = random.randint(1,90)
numbers.append(value)
numbers.sort()
```

If youâ€™re aiming to practice algorithmic thinking (which can come in handy), itâ€™s useful to understand how the above answer works, but for practical use, you just need `random.sample`

, and `sort`

(which youâ€™ve already used)

I see. Thanks. Was really confused by this one, now when I see the solution itâ€™s logical.