Python Guide #11: Reading Files
Python lets you read files, write to files and create files. In this guide I show you how to read files, perform simple operation on the data and then we will improve game of hangman we made before.
To read a file, we use
with open("path_to_file", "r") as f: data = f.read()
This is the simplest way to read files, if you want to have more, then I recommend you start going to documentation, I can’t present everything, but enough to get you started.
Improving hangman game.
It is time for us to improve a hangman game. Instead of providing the word ourselves and seeing it, now we will create file which contains words, that the program will choose from. Then we will play against computer, based on a database of its words.
To start, lets create a file, in which we will put our words. In the directory of the project, create new file
Inside of dictionary, lets put words, that we want computer to have access to, one line, one word.
apple orange cheery horse crocodile kangaroo chicken motorbike yacht
Now lets experiment with reading the file, create new python program in the same directory
with open("dictionary.txt", "r") as f: d = f.read() print("Initial data:\n", d) # Now we want to separate data, # so that we have list # of words # that we can iterate over l = d.split("\n") # function split, splits string # in the places where # provided character is print(l) # We want to get rid of whitespaces # and empty words final_list =  for i in range(len(l)): if l[i]: # append adds # element to list final_list.append(l[i]) print(final_list)
Now you know how to read file, how to process its contents to generate a list and from previous guide, you know how to use random function. Lets use these skills to improve hangman game.
Instead of taking user input as a guess word, it will take random word from a text file.
import random # Lets give player 5 chances, # you can modify this later if you want chances = 5 with open("dictionary.txt", "r") as f: d = f.read() l = d.split("\n") final_list =  for i in range(len(l)): if l[i]: final_list.append(l[i]) word_to_guess = random.choice(final_list) game_finished = False failed_letters = "" # functions len() returns length of an object current_state = "_" * len(word_to_guess) def update_state(letter): ''' This function takes a letter as parameter and replaces underscore in current state in places where this letter should be ''' new_state = "" for i in range(len(word_to_guess)): if word_to_guess[i] == letter: new_state += letter else: new_state += current_state[i] return new_state # as long as game is not finished # we want the cycle to repeat # ask for letter # update state # evaluate chances while not game_finished: print(current_state, "chances remaining", chances, "\nincorrect letters:\n", failed_letters) letter = input("Please input letter: ") # checking if letter is inside the word to guess # if it is right, we update the word # if not, we remove chance if letter in word_to_guess: current_state = update_state(letter) elif letter in failed_letters: print("You already used this letter!") else: failed_letters += letter chances -= 1 # if current guessed word matches # word we need to guess # game is finished and we win if current_state == word_to_guess: print("Congratulations, you guessed the word:", word_to_guess) game_finished = True # if we have no chances left # we lost, game is finished # loop won't repeat if chances == 0: game_finished = True print("Word has not been guessed:", word_to_guess)
Compare what has changed and try to understand it. Now the game became challenging. You can also add more words to the dictionary.