I'm scripting a small game to guess a number and I don't understand why I'm getting this error as both num and userNum in my numCheck() function should be strings and not functions.
import random
def num():
"""Returns a number between 1000 and 9999."""
num = str(random.randint(1000, 9999))
print("Random number is: " + num) #for testing purposes
return num
def userNum():
"""Asks user for a number between 1000 and 9999."""
while True:
try:
userNum = int(input("Choose a number between 1000 and 9999: "))
except ValueError:
print("This isn't a number, try again.")
continue
if userNum < 1000 or userNum > 9990:
print("Your number isn't between 1000 and 9999, try again.")
continue
else:
break
userNum = str(userNum)
return userNum
def numCheck(num, userNum):
"""Checks the number of cows and bulls."""
cow = 0
bull = 0
for i in range(0, 3):
if userNum[i] == num[i]:
cow += 1
else:
bull += 1
print("You have " + str(cow) + " cow(s) and you have " + str(bull) + " bull(s).")
return cow
def gameLoop():
"""Loops the game until the user find the right number."""
num()
cow = 0
if cow < 4:
userNum()
numCheck(num, userNum)
else:
print("Congratulation, You found the right number!")
gameLoop()
The error I get when I run the script is the following:
==================== RESTART: /home/pi/Desktop/cowbull.py ====================
Random number is: 8104
Choose a number between 1000 and 9999: 5555
Traceback (most recent call last):
File "/home/pi/Desktop/cowbull.py", line 47, in <module>
gameLoop()
File "/home/pi/Desktop/cowbull.py", line 43, in gameLoop
numCheck(num, userNum)
File "/home/pi/Desktop/cowbull.py", line 30, in numCheck
if userNum[i] == num[i]:
TypeError: 'function' object is not subscriptable
>>>
Note that other things may not be working or perfect at the moment, but I'm only trying to figure out the logic of this error so I can continue on.
Thanks for the help!
userNumand you are also using that same name as a parameter for the functionnumCheck. That, in sum, is your issue. Solution: change one of those names.