so ill post a few of my failed examples below along with what I came up with as a fix, and then the actual correct code. I feel like im so close to grasping this, but missing some logic. this is for a hangman game.
one of the failed attempts:
import random
word_list = ["aardvark", "baboon", "camel"]
chosen_word = random.choice(word_list)
#Testing code
print(f'Pssst, the solution is {chosen_word}.')
#Create an empty List called display.
#For each letter in the chosen_word, add a "_" to 'display'.
#So if the chosen_word was "apple", display should be ["_", "_", "_", "_", "_"] with 5 "_" representing each letter to guess.
display = ["_"] * len(chosen_word)
guess = input("Guess a letter: ").lower()
#If the letter at that position matches 'guess' then reveal that letter in the display at that position.
#e.g. If the user guessed "p" and the chosen word was "apple", then display should be ["_", "p", "p", "_", "_"].
for letter in chosen_word:
if guess == letter:
for i in range(len(chosen_word)):
display.insert(i, guess)
print(display)
second:
for letter in chosen_word:
if guess == letter:
for i in range(len(chosen_word[letter])):
display.insert(i, guess)
I ended up just saying screw it and went to this:
display = []
for char in chosen_word:
if guess == letter:
display += letter
else:
display += "_"
correct way of doing it:
import random
word_list = ["aardvark", "baboon", "camel"]
chosen_word = random.choice(word_list)
print(f'Pssst, the solution is {chosen_word}.')
display = []
word_length = len(chosen_word)
for _ in range(word_length):
display += "_"
print(display)
guess = input("Guess a letter: ").lower()
for position in range(word_length):
letter = chosen_word[position]
if letter == guess:
display[position] = letter
print(display)
so as you can see, i get that I can grab specific parts of a list using indices or slices, but somewhere in my brain my logic is wrong. if you guys have struggled with this before or if you have a good youtube video to help me break it down id be beyond thankful!
Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!
Cross posting is strongly encouraged in the instance. If you feel your post or another person’s post makes sense in another community cross post into it.
Hope you enjoy the instance!
Follow the wormhole through a path of communities !webdev@programming.dev
Having the output of each thing you tried would help us get a feel for where your code was messing up without us having to run it ourselves to get the output.
That said, for code snippet 1, you’re inserting the letter instead of replacing the underscore with the letter. Not only that, but your for-loop essentially does the following:
chosen_word
guess
is in the above loopdisplay
array and addguess
that many times (effectively doubling the `display array)Your second code snippet does the same thing, but with actual formatting so that Python could run the code.
I believe your third code snippet introduces
char
but then returns toletter
. It might work if you replacedchar
withletter
again. Also+= letter
will add the letter to the end ofdisplay
, which is not what you want to do.I did my own version of Hangman in Python a couple years ago if you want to look at the code and see what I did. I’m just a hobbyist, so it’s not fantastic, but it might give you an idea of how someone else has approached the problem.