Reputation: 35
I have finished creating the MasterMind game, but I am getting a TypeError that I am not able to debug. It does say what I am doing wrong on the error, but do not know how to fix this. This is my code:
import random
letters = ["A", "B", "C", "D", "E", "F"]
length = 4
def main():
list_code = create_code(4)
secret_code = "".join(list_code)
guess_counter = 0
guess = ""
list_guess = ""
while guess_counter < 10 and guess != secret_code:
list_guess = get_code()
guess = "".join(list_guess)
result = check_code(secret_code, guess)
guess_counter+= 1
if guess == secret_code:
print("You win!")
else:
print("Sorry, you lost. The corect code was", secret_code)
def create_code(length):
letters_copy = letters.copy()
code_word = ""
for i in range(length):
letter = random.choice(letters_copy)
letters_copy.remove(letter)
code_word = code_word + letter
code = list(code_word)
return code
def get_code():
guess_code = input("Guess the 4 digit code (abcd): ").upper()
user_code = list(guess_code)
if len(user_code) != length:
print("Must enter only 4 letters")
user_code = get_code()
for i in guess_code:
if user_code[i] in letters:
continue
else:
print("invalid answer, choose between letters a, b, c, d, e, f")
user_code = guess_code()
break
return guess_code
def check_code(secret_code, guess):
white_counter = 0
red_counter = 0
win = False
for i in guess:
if guess[i] in secret_code[i]:
red_counter += 1
continue
elif guess[i] in secret_code:
white_counter += 1
continue
else:
continue
print("R"*red_counter, "W"*white_counter)
return white_counter, red_counter
main()
And the error I am getting when I run this program is:
Traceback (most recent call last):
File "main.py", line 71, in <module>
main()
File "main.py", line 13, in main
list_guess = get_code()
File "main.py", line 42, in get_code
if user_code[i] in letters:
TypeError: list indices must be integers or slices, not str
I don't know what I am doing wrong so any help would be great. Thank you!
Upvotes: 1
Views: 50
Reputation: 2379
At lines 41 and 55, you should be referencing element index and not the element it.
import random
letters = ["A", "B", "C", "D", "E", "F"]
length = 4
def main():
list_code = create_code(4)
secret_code = "".join(list_code)
guess_counter = 0
guess = ""
list_guess = ""
while guess_counter < 10 and guess != secret_code:
list_guess = get_code()
guess = "".join(list_guess)
result = check_code(secret_code, guess)
guess_counter+= 1
if guess == secret_code:
print("You win!")
else:
print("Sorry, you lost. The corect code was", secret_code)
def create_code(length):
letters_copy = letters.copy()
code_word = ""
for i in range(length):
letter = random.choice(letters_copy)
letters_copy.remove(letter)
code_word = code_word + letter
code = list(code_word)
return code
def get_code():
guess_code = input("Guess the 4 digit code (abcd): ").upper()
user_code = list(guess_code)
if len(user_code) != length:
print("Must enter only 4 letters")
user_code = get_code()
for i in range(len(guess_code)): #correction here
if user_code[i] in letters:
continue
else:
print("invalid answer, choose between letters a, b, c, d, e, f")
user_code = guess_code()
break
return guess_code
def check_code(secret_code, guess):
white_counter = 0
red_counter = 0
win = False
for i in range(len(guess)): #correction here
if guess[i] in secret_code[i]:
red_counter += 1
continue
elif guess[i] in secret_code:
white_counter += 1
continue
else:
continue
print("R"*red_counter, "W"*white_counter)
return white_counter, red_counter
main()
Upvotes: 1