TP 13 oct 2022
This commit is contained in:
parent
2c97733d86
commit
c2b8e240b0
58
13oct/hangman.py
Normal file
58
13oct/hangman.py
Normal file
@ -0,0 +1,58 @@
|
||||
from hangmantui import hangman, clear
|
||||
from userInput import ask_word_in_dictionary, ask_letter
|
||||
|
||||
|
||||
def hangman_start(score: int):
|
||||
"""start the hangman """
|
||||
life = 10
|
||||
choosed_word = ask_word_in_dictionary()
|
||||
found_letters = '*' * len(choosed_word)
|
||||
not_in_word = ''
|
||||
while life > 0:
|
||||
draw(life, found_letters)
|
||||
in_letter = ask_letter(not_in_word)
|
||||
if in_letter in choosed_word:
|
||||
found_letters = unhide_letters(choosed_word, in_letter, found_letters)
|
||||
else:
|
||||
not_in_word += in_letter
|
||||
life -= 1
|
||||
|
||||
if found_letters == choosed_word:
|
||||
clear()
|
||||
print('CONGRATS!! the word was: ', choosed_word)
|
||||
score += len(list(dict.fromkeys(choosed_word[:]))) + life - len(not_in_word)
|
||||
break
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def unhide_letters(choosed_word, letter, found_letters):
|
||||
"""take a letter and unhide it in the found letters
|
||||
:choosed_word: the original word
|
||||
:letter: the letter to unhide
|
||||
:found_letters: the current found letter
|
||||
:returns: found letter with unhiden letters
|
||||
"""
|
||||
ret = ''
|
||||
for i in range(len(choosed_word)):
|
||||
if letter in choosed_word[i]:
|
||||
ret += letter
|
||||
else:
|
||||
ret += found_letters[i]
|
||||
return ret
|
||||
|
||||
|
||||
def draw(life, word):
|
||||
"""draw the main screen with hangman, life remaining and word with * on unknown letters
|
||||
:life: int of life remaining
|
||||
:word: current word with * on unknown letters and other letters on found
|
||||
"""
|
||||
clear()
|
||||
print(life)
|
||||
hangman(life)
|
||||
print(word)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("your score is", hangman_start(0))
|
||||
|
66
13oct/hangmantui.py
Normal file
66
13oct/hangmantui.py
Normal file
@ -0,0 +1,66 @@
|
||||
# -*- encoding:utf-8 -*-
|
||||
"""Terminal User Interface for the hangman."""
|
||||
|
||||
|
||||
def clear():
|
||||
"""Clear the terminal screen."""
|
||||
print(chr(27) + "[2J")
|
||||
|
||||
|
||||
def hangman(lives):
|
||||
"""
|
||||
Display a hangman state on terminal with maximum 10 lives.
|
||||
|
||||
lives is the remaining number of lives between 0 and 10. When lives is 0,
|
||||
the hangman is completed/dead.
|
||||
"""
|
||||
# Top
|
||||
print(" __________")
|
||||
print(" | / |")
|
||||
# Head
|
||||
if lives <= 5:
|
||||
print(" |/ O")
|
||||
else:
|
||||
print(" |/")
|
||||
# Arms and torso
|
||||
if lives <= 2:
|
||||
print(" | /|\\")
|
||||
elif lives <= 3:
|
||||
print(" | /|")
|
||||
elif lives <= 4:
|
||||
print(" | |")
|
||||
else:
|
||||
print(" |")
|
||||
# Torso
|
||||
if lives <= 4:
|
||||
print(" | |")
|
||||
else:
|
||||
print(" |")
|
||||
# Legs
|
||||
if lives <= 0:
|
||||
print(" | / \\")
|
||||
elif lives <= 1:
|
||||
print(" | /")
|
||||
else:
|
||||
print(" |")
|
||||
# Bottom / Stool
|
||||
if lives <= 6:
|
||||
print(" | _")
|
||||
else:
|
||||
print(" |)")
|
||||
if lives <= 7:
|
||||
print(" /|\\ /|\\")
|
||||
elif lives <= 8:
|
||||
print(" /|\\ / \\")
|
||||
elif lives <= 9:
|
||||
print(" /|\\ /")
|
||||
else:
|
||||
print(" /|\\")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
for i in range(10, -1, -1):
|
||||
clear()
|
||||
print("%i lives left:" % i)
|
||||
hangman(i)
|
||||
print("")
|
BIN
13oct/serie4.pdf
Normal file
BIN
13oct/serie4.pdf
Normal file
Binary file not shown.
58
13oct/userInput.py
Normal file
58
13oct/userInput.py
Normal file
@ -0,0 +1,58 @@
|
||||
def belongs_to_dictionary(word):
|
||||
"""check if a word is in dictionary
|
||||
:word: the word to check
|
||||
:returns: true if in word.txt else false
|
||||
"""
|
||||
with open("words.txt") as wl:
|
||||
word_list = wl.read().split()
|
||||
return word in word_list
|
||||
|
||||
|
||||
def ask_word_in_dictionary():
|
||||
""" ask a word, if not in word.txt redo
|
||||
:returns: word of word.txt
|
||||
"""
|
||||
while(True):
|
||||
in_word = input("insert a word that belongs to the file words.txt: ")
|
||||
if belongs_to_dictionary(in_word):
|
||||
return in_word
|
||||
print(f"{in_word} is not in word.txt")
|
||||
|
||||
|
||||
def ask_letter(tried_letters):
|
||||
""" ask for a letter and check if it is not in trie_letters else redo
|
||||
:tried_letters: list of already tried letters
|
||||
:returns: the letter that is not in tried letters
|
||||
"""
|
||||
while(True):
|
||||
in_letter = input(f"insert a letter that is not tested yet: {tried_letters.split()}: ")
|
||||
if in_letter not in tried_letters:
|
||||
return in_letter
|
||||
print(f"{in_letter} is already guessed")
|
||||
|
||||
|
||||
if __name__ == "__main__": # Only tests
|
||||
print("Test de la fonction, belongs_to_dictionary")
|
||||
testing_words = {'banana': True,
|
||||
'patatas': False,
|
||||
'tonitch': False,
|
||||
'other': True,
|
||||
'lol': False,
|
||||
1: False,
|
||||
False: False}
|
||||
for value, result in testing_words.items():
|
||||
if belongs_to_dictionary(value) == result:
|
||||
print(f"{value} has been tested, returned {result} -- SUCCESS!")
|
||||
else:
|
||||
print(f"{value} has been tested, returned {result} -- ERROR!")
|
||||
|
||||
print("Test de la fonction, ask_word_in_dictionary")
|
||||
value = ask_word_in_dictionary()
|
||||
print(f"The function returned value {value}")
|
||||
|
||||
print("Test de la fonction, ask_letter")
|
||||
value = ask_letter("")
|
||||
print(f"The function returned value {value}")
|
||||
value = ask_letter("aeiou")
|
||||
print(f"The function returned value {value}")
|
||||
print("Test are finished")
|
113810
13oct/words.txt
Normal file
113810
13oct/words.txt
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user