From 0df8b9f032231bc15e732e1c2602ce3f67959274 Mon Sep 17 00:00:00 2001 From: TiagoRG Date: Mon, 13 Nov 2023 22:33:11 +0000 Subject: [PATCH] [FP] Add project 1 of 2023/2024 Signed-off-by: TiagoRG --- 1ano/1semestre/fp/proj1-2324/forca.py | 134 +++++++++++++++++++++++ 1ano/1semestre/fp/proj1-2324/wordlist.py | 2 + 2 files changed, 136 insertions(+) create mode 100644 1ano/1semestre/fp/proj1-2324/forca.py create mode 100644 1ano/1semestre/fp/proj1-2324/wordlist.py diff --git a/1ano/1semestre/fp/proj1-2324/forca.py b/1ano/1semestre/fp/proj1-2324/forca.py new file mode 100644 index 0000000..f552a59 --- /dev/null +++ b/1ano/1semestre/fp/proj1-2324/forca.py @@ -0,0 +1,134 @@ +import random +from wordlist import words1, words2 + + +def main(): + # Descomente a linha que interessar para testar + words = words1 # palavras sem acentos nem cedilhas. + words = words2 # palavras com acentos ou cedilhas. + words = words1 + words2 # palavras de ambos os tipos + + # Escolhe palavra aleatoriamente + secret = random.choice(words).upper() + + # Complete o programa + + # Inicializa o contador de erros a 0 + errors: int = 0 + + # Initializa a lista vazia de letras usadas + used_letters: list[str] = [] + + # Obtém a string da palavra escondida inicial + hidden_secret, valid_letter = get_hidden("", secret, used_letters) + + while True: + # Apresenta o display + print('\033c', end='') + print(get_hangman(errors), end='\n\n') + print(f"\nPalavra: {hidden_secret}") + print(f"\nLetras usadas: {' '.join(used_letters)}") + print(f"\nErros: {errors}") + + # Se a palavra escondida for igual à descoberta até ao momento, + # informa que descobriu, mostra o número de erros e sai do programa + if hidden_secret.replace(' ', '') == secret: + print(f"\n\nAcertou! A palavra era {secret}. Teve {errors} erros.") + exit(0) + + # Se chegar a 7 erros para o programa + if errors == 7: + print(f"\nNão acertou, a palavra era: {secret}") + exit(0) + + # Pede a próxima letra ao utilizador + next_letter: str = input("\nAposta? ").upper() + + # Se a letra já tiver sido usada ou não é uma letra, ignora e avança + if next_letter in used_letters or not next_letter.isalpha(): + continue + + # Adiciona a letra à lista + used_letters.append(next_letter) + + # Obtém a nova palavra atual e verifica se a letra existia na secreta + hidden_secret, valid_letter = get_hidden( + hidden_secret, secret, used_letters) + + # Se a letra não existia na palavra secreta, adiciona 1 erro + if not valid_letter: + errors += 1 + + +def get_hidden( + current_hidden: str, secret: str, used_letters: list[str] +) -> tuple[str, bool]: + """ + Obtém a palavra descoberta até ao momento e valida a última letra testada. + """ + + # Dicionário com as letras acentuadas + letters = { + 'A': {'Á', 'À', 'Ã'}, + 'E': {'É', 'Ẽ', 'Ê'}, + 'I': {'Í'}, + 'O': {'Ó', 'Õ', 'Ô'}, + 'U': {'Ú'}, + 'C': {'Ç'} + } + + # Reinicializa a palavra descoberta + hidden_secret = "" + + # Verifica todas as letras da palavra secreta + for i in range(len(secret)): + # Inicializa uma variável para saber se algum caractér foi adicionado + added_char = False + + # Testa os caractéres acentuados no dicionário letters + for key, value in letters.items(): + if secret[i] in value and key in used_letters: + hidden_secret += f"{secret[i]} " + added_char = True + + # Testa a letra apostada + if secret[i] in used_letters: + hidden_secret += f"{secret[i]} " + added_char = True + + # Se não tiver sido adicionada nenhuma letra, adiciona um underscore + if not added_char: + hidden_secret += "_ " + + # Retorna a nova palavra descoberta e se houve mudança + # (se a letra não era válida, a palavra mantém-se igual) + return hidden_secret, hidden_secret != current_hidden + + +def get_hangman(errors: int) -> str: + """ + Obtém o desenho da forca baseado no número de erros. + """ + hangman = "_____\n| |\n|" + + if errors == 0: + hangman += "\n|\n|" + elif errors == 1: + hangman += " o\n|\n|" + elif errors == 2: + hangman += " o\n| |\n|" + elif errors == 3: + hangman += " o\n| /|\n|" + elif errors == 4: + hangman += " o\n| /|\\\n|" + elif errors == 5: + hangman += " o\n| /|\\\n| /" + elif errors >= 6: + hangman += " o\n| /|\\\n| / \\" + + hangman += "\n|_______" + return hangman + + +if __name__ == "__main__": + main() diff --git a/1ano/1semestre/fp/proj1-2324/wordlist.py b/1ano/1semestre/fp/proj1-2324/wordlist.py new file mode 100644 index 0000000..129d68e --- /dev/null +++ b/1ano/1semestre/fp/proj1-2324/wordlist.py @@ -0,0 +1,2 @@ +words1 = ["pesponteasses", "pinotearem", "engendrou", "indemnizarmos", "aconsoantarias", "arreste", "estereotiparam", "enfastiariam", "estratificaremos", "soltastes", "fraseaste", "prosseguem", "discursai", "gretasse", "ratazanassem", "infamai", "charlataneie", "descomoveres", "convivida", "coreografasses", "arrematador", "presbiteriano", "aurificara", "saberiam", "fenderem", "defensasses", "balbuciais", "imputes", "inaugurardes", "impopularizavas", "individuadora", "encurralam", "negada", "mesquinhamos", "cartografastes", "arrancaria", "arboresceram", "enegrece", "refendera", "passivei", "stops", "abaixarmos", "suspendemos", "intrigarem", "festejava", "razoabilidade", "plebeizarei", "berregaras", "munjas", "serradelas", "sobreporeis", "desmobiladas", "quintuplicados", "galasse", "despovoam", "fanicaremos", "desincorporam", "houvesses", "deferiria", "ornamentamos", "retardamos", "boche", "renavego", "mutilariam", "rosal", "decretarei", "atesses", "incidisse", "antemuradas", "pestilentas", "bafeja", "guardavas", "evocava", "concorrera", "catalisemos", "esmurrava", "desenjoaram", "acalentareis", "avizinharem", "clareiem", "atempam", "viciar", "motivavas", "ziguezagueaste", "repudies", "grisarem", "postularmos", "averiguai", "peladas", "algebrizados", "desengracemos", "enfolhastes", "paparicarem", "retires", "consistirmos", "flava", "bulemos", "foscasses", "arribais", "aresteiros", "indente", "abrigaras", "trasladai", "bolastes", "ilharas", "assombraras", "ratazanardes", "selecionas", "ironizados", "passivos", "aparentada", "sinalizariam", "apropositavam", "desempanais", "arrumados", "endividasse", "iluminava", "seja", "desunifiqueis", "horda", "raptaste", "quesitos", "presasses", "comunicarmos", "carrilhonais", "urdimentos", "herdarem", "transportaram", "dengue", "ravinemos", "avessareis", "subinspetoras", "reclamaria", "noivavam", "ramificai", "tragasses", "estilos", "descalcificaram", "acalcado", "afilhe", "sacarmos", "repoises", "coliga", "reaparecido", "redimensionava", "adentras", "massacrar", "nevarias", "compaginardes", "assopraria", "tratanteado", "necessitados", "vareira", "cedilhados", "levedaria", "carimba", "despertos", "impermeabilizados", "ordenadas", "varejareis", "resigno", "farrapava", "rebelei", "desembalarem", "girou", "macerassem", "soou", "desinfestarmos", "loireceres", "lesamos", "cometeste", "coadquirireis", "hebraizarem", "afumam", "genealogista", "festejador", "laureio", "governasse", "redigirias", "esfregadoras", "maquinara", "concetualizes", "particularizarmos", "aquadrilhares", "caracolavas", "abastonares", "rasgamentos", "escolarizarem", "abrasaram", "incense", "soberanas", "falsificador", "extasiares", "arregramos", "brutais", "desencabelarem", "labializeis", "reprogramaria", "arrefentasse", "conceituarem", "desengrenaram", "ostentada", "rabequearemos", "atedie", "debicarem", "imaginadoras", "aduzias", "desagoniara", "redondeai", "limpadores", "desbastadora", "topeis", "exulariam", "evangelizarem", "envinagravas", "nitratavam", "brotasses", "excursionastes", "emulsionantes", "descoordenais", "embatoco", "turqueses", "calcorrearem", "reacoplaste", "pontificarmos", "lavraram", "remastigado", "rebula", "musicaria", "ladrilheis", "repusesse", "respigava", "enxugou", "individuam", "assumira", "desencapareis", "profetizado", "maluquearas", "participativo", "aclimatizeis", "interrompi", "baseavas", "malogrem", "mediocrizareis", "arredei", "intensificada", "individualizais", "quicos", "enveredareis", "autocopiarem", "perdularia", "doutros", "exclamaremos", "orlassem", "desvendaram", "assotado", "macaquinho", "malcozestes", "comprometi", "prestabilidade", "desabitasse", "figurinista", "muralhares", "narcotizam", "anilhassem", "coreografais", "pardacenta", "escrevinharmos", "malcozerem", "vendereis", "enervamento", "gorjeaste", "aprefixareis", "recavara", "seixal", "fotografaras", "adestrasse", "talheres", "acordam", "analfabeta", "prosperas", "desgrenharas", "sinonimizadas", "gozamos", "acresciam", "infundindo", "rebatizariam", "assapatada", "mundializarei", "ensebe", "permutada", "rebolamos", "gravitassem", "cochadas", "regrassem", "quartinho", "vitimaste", "refortificarmos", "nefasto", "burrificareis", "fortaleceram", "minorariam", "rastejarmos", "desencarrilavam", "flauteara", "nanaras", "antevendo", "intermediaram", "pernoutarias", "prosardes", "confidenciais", "desconvertias", "universalize", "abjudiqueis", "esfuziamos", "causticando", "acoimassem", "profissionalizaram", "progressivas", "perdoada", "reembarcando", "engradearmos", "cortado", "atoucinhem", "entrevereis", "estardalhas", "superlativares", "postuladores", "rusgado", "rascasses", "negoceias", "seletivas", "desunirias", "coroarem", "atraiais", "murmurejo", "atentes", "blasfemaria", "preporia", "preestabelecemos", "agrediam", "azulejareis", "saltitais", "ancestralmente", "desvenero", "sobejada", "vociferadas", "realizava", "aproximarem", "tossicardes", "reinscritos", "brecando", "descampadas", "amealhador", "malbaratadores", "encalacrai", "sustando", "adjetivares", "revirava", "pousarem", "quiromancia", "quadruplaste", "garantirmos", "coloreie", "expiarem", "traduzo", "farolizavam", "vassourardes", "barcarola", "delimitadas", "obtenham", "desnorteara", "espionaria", "tarifarei", "contraproporemos", "selaras", "marcho", "complanem", "relocalizes", "escapulias", "amourariam", "originavas", "inflamo", "ocultadas", "desqualificaste", "emparceleis", "inversamente", "jurai", "ameigado", "marearei", "malfadei", "ensacastes", "corricariam", "enforcaras", "cascalhou", "legitimam", "navalhou", "gaguejaremos", "reconsideraste", "policie", "cinematografa", "dealbavam", "baralhemos", "validassem", "afranzinastes", "sortira", "caldeirara", "orquestrariam", "representariam", "tacanhearia", "desmandasse", "croniquem", "inscrevi", "crepusculizeis", "revisaria", "tilintante", "quebraria", "benzo", "desestagnara", "bolinaras", "municipalizai", "desacataste", "enfiamentos", "engane", "retaliasses", "dando", "resolverem", "estrebuchamento", "calejavas", "desnaturarem", "introdutivo", "enrolhar", "depositaremos", "escrevinhadora", "impossibilitardes", "arade", "atarantamento", "circunscreveremos", "desencaminheis", "nicotino", "anotada", "inovaremos", "maxilares", "invetivai", "cigarrardes", "carcinomas", "refloristes", "aloirem", "frustradora", "aniversariardes", "gabem", "repescadas", "fugiria", "sufocaste", "ziguezagueavam", "terrificaram", "denudado", "rotores", "fungando", "menosprezos", "portugalizariam", "descarregar", "enquadrar", "acreditaras", "idolatro", "reequilibrasse", "prosperasses", "inconformai", "desencabelasse", "pedantearem", "contextualizarmos", "colapsasse", "estontece", "reexpedissem", "idolatrasse", "compulse", "acantonavas", "romanceardes", "atroparias", "filatelismos", "argumentais", "acobardardes", "alvissaravam", "revistemos", "menorizei", "bromeis", "resumes", "individuarem", "gananciavam", "desencorajas", "amontoaste", "segregarias", "reiteravam", "recompense", "rabujem", "desencorajas", "goelaria", "ilegalizei", "desmineralizamos", "caulificamos", "pulsei", "absorveria", "erigido", "atroador", "acometedoras", "destinais", "quotizarmos", "pasteleiras", "reabririas", "navegando", "passearem", "investirem", "dissimular", "mascares", "insularem", "pincelarias", "surpreendido", "prolongas", "drenarias", "sinalizarias", "empastavas", "enrabichardes", "dopou", "retingistes", "promovi", "retalhadoras", "fidelizareis", "arvorarmos", "marretemos", "desabituo", "monetizares", "praguejais", "comerciaras", "oceanicidades", "desintegras", "conservantistas", "influencies", "passeata", "ruja", "andamento", "cavalgareis", "abusassem", "rixares", "incitares", "descapitalizaras", "aventes", "regerariam", "desmentias", "macro", "contentavas", "impermeabilizas", "aclimate", "espionai", "namorais", "vendavam", "destrones", "guitarrearem", "capacitem", "algebrizam", "reciprocarias", "recobriras", "infestara", "catolize", "impuseste", "distendidas", "tateado", "traseiros", "surgimento", "indultara", "amontoai", "ensaboarem", "sanita", "turbasses", "desquitarem", "hebraizamos", "desaclimatai", "subavaliares", "esganadas", "biforme", "desencardiriam", "gaspearam", "desamontoada", "apipasse", "tossiras", "dependuravam", "lambearei", "sinfonizavas", "agasalhastes", "anavalhou", "espancava", "desnasalasse", "fardaram", "sabotava", "pantanizei", "narramos", "devotava", "acudires", "recompraras", "reexportou", "aeroportos", "subscreverias", "assanhasses", "colardes", "castificados", "abanemos", "entesoirassem", "instais", "ecopontos", "enluvando", "bananeiro", "fingistes", "acobardando", "movimentem", "aquinhoei", "predefiniras", "derrogava", "faturava", "principescos", "degelam", "grandeza", "oveis", "malfizeres", "biscouto", "estoures", "aterrorizes", "arrasarias", "ingerisse", "ementaria", "analises", "encetais", "evacuasses", "elipsoidal", "dualizando", "desagravaria", "armazenamentos", "conformara", "atines", "amargavas", "autonomizou", "restringias", "encurralaste", "corpanzil", "teledirija", "hermetismos", "compreendiam", "ambientes", "aderidos", "convirmos", "enrascados", "patinhara", "dogmatizando", "emergindo", "debrucemos", "paroquiaram", "choraminguei", "existiremos", "desacomodais", "coordenemos", "encartavam", "amontanhavam", "substituindo", "sancionares", "ocidentalizem", "lentejoulemos", "reavistes", "formularam", "assolape", "exaltarias", "safra", "delirardes", "escandalizar", "redutos", "aconselharia", "engalfinhei", "gracejariam", "preestabelece", "ressalvares", "lampejava", "chalreadas", "progrida", "indexadora", "concernira", "acarretam", "matinada", "industriareis", "alavancamos", "loucura", "ansiais", "berloques", "dignificadas", "foliar", "transitivarei", "insuflai", "primorosa", "seborreia", "encarcerarei", "reincides", "aposentastes", "miserem", "impropriavam", "modularidade", "floresceis", "germanizadas", "descomprometeremos", "gravidarmos", "amourar", "ambicionou", "extrais", "escanhoaram", "recavado", "digressionou", "ravinai", "chi", "casquilhou", "sibilantizaras", "discordem", "peralteaste", "xisto", "reescalonassem", "cavaleirareis", "abrigaria", "cacicada", "acarretardes", "mim", "interventivas", "decomponibilidade", "mercadejaria", "barulharam", "despenteares", "lavoiras", "prejudicaste", "cauteleiro", "ginasial", "desinfecionareis", "amarrotada", "letargias", "emparcelarem", "escalfaram", "dezassete", "adentrada", "despejassem", "esquadria", "redobradas", "analisarmos", "repovoados", "despeitora", "bocadinhos", "existires", "indutores", "corujasse"] +words2 = ["desconcentrar\u00e3o", "esparramar\u00e3o", "despist\u00e1sseis", "apre\u00e7adoras", "reentregar\u00edamos", "entup\u00edssemos", "bolorec\u00edeis", "brilh\u00e1mos", "apalacian\u00e1vamos", "inch\u00e1ssemos", "exteriorizar\u00edamos", "estarrec\u00earamos", "reposicion\u00e1ssemos", "migrar\u00e3o", "administr\u00e1ramos", "sachar\u00e1", "remagnetiz\u00e1vamos", "desfranj\u00e1sseis", "encru\u00e1reis", "enxurrar\u00e1", "desamotin\u00e1sseis", "gigantizar\u00edamos", "debilit\u00e1vamos", "embarracar\u00edamos", "concit\u00e1veis", "desaromatizar\u00e3o", "embandeir\u00e1vamos", "eleva\u00e7\u00e3o", "empobrecer\u00edamos", "transport\u00e1vel", "torrificar\u00edamos", "in\u00e7ar\u00edeis", "linch\u00e1mos", "cirand\u00e1vamos", "resenhar\u00e3o", "hexacampe\u00f5es", "demand\u00e1reis", "esmalt\u00e1mos", "medalh\u00e1reis", "mesclar\u00e3o", "naufragar\u00edamos", "escusar\u00edamos", "desnorte\u00e1reis", "dep\u00f3sito", "desencarapu\u00e7assem", "conson\u00e1veis", "agrimensar\u00edamos", "prostitu\u00eddos", "rejubilar\u00e1s", "perisc\u00f3pico", "avult\u00e1ramos", "explor\u00e1veis", "baloi\u00e7ais", "descarnar\u00e3o", "incompatibiliz\u00e1ramos", "infernizar\u00e1s", "repens\u00e1veis", "desamolg\u00e1ssemos", "atafulh\u00e1ssemos", "conglomer\u00e1tico", "paleol\u00edtica", "moinar\u00edeis", "agraf\u00e1ssemos", "recravar\u00edamos", "arru\u00e7armos", "destrin\u00e7ador", "vermelha\u00e7o", "joelhar\u00e1s", "envidra\u00e7am", "agricult\u00e1ssemos", "amoralizar\u00edamos", "sabichar\u00e1s", "icon\u00f3filo", "embaralhar\u00e1", "imortaliz\u00e1veis", "abra\u00e7\u00e1vamos", "afret\u00e1vamos", "minutar\u00e3o", "infant\u00e1rios", "embainhar\u00edamos", "co\u00e7aremos", "refogar\u00e1", "reagrup\u00e1reis", "desentup\u00edeis", "avi\u00e1reis", "crucificar\u00edamos", "sobreluz\u00edssemos", "almo\u00e7ai", "acen\u00e1mos", "temporiz\u00e1ramos", "calor\u00edficas", "boicote\u00e1reis", "abstra\u00edssemos", "inclu\u00edramos", "espoli\u00e1ramos", "esquematizar\u00e1s", "enfaixar\u00e3o", "ajoelhar\u00e3o", "incont\u00ednuo", "restituir\u00e1", "indesment\u00edveis", "esvoa\u00e7ares", "desencravar\u00edeis", "agrimens\u00e1vamos", "acomodar\u00e1s", "espa\u00e7amento", "refortalec\u00easseis", "risc\u00e1ssemos", "problematiz\u00e1veis", "embrulh\u00e1vamos", "ro\u00e7aria", "provoc\u00e1ssemos", "oftalmol\u00f3gicas", "repuxar\u00edamos", "cancer\u00e1sseis", "suborna\u00e7\u00e3o", "florir\u00edeis", "encancer\u00e1mos", "esperan\u00e7ado", "pux\u00f5es", "atordo\u00e1mos", "esgrim\u00edamos", "menorizar\u00e1", "guilhotinar\u00e1s", "destitu\u00eda", "desbravar\u00e1s", "embrion\u00e1rias", "enchouri\u00e7aras", "desaparelhar\u00e3o", "recargar\u00e1s", "co\u00e1gulo", "instru\u00edas", "eleg\u00eassemos", "circunstanci\u00e1ramos", "autom\u00f3rfico", "educar\u00e3o", "retornar\u00edamos", "andr\u00f3fobas", "individualizar\u00edeis", "embustear\u00edamos", "evid\u00eancias", "desburocratizar\u00e3o", "ressaud\u00e1veis", "of\u00eddeos", "abobor\u00e1veis", "potenci\u00e1ssemos", "polic\u00eantrico", "tens\u00f5es", "jorrar\u00edamos", "pespeg\u00e1reis", "reabita\u00e7\u00e3o", "eclipsar\u00e1", "vici\u00e1reis", "baston\u00e1rias", "amorda\u00e7ar\u00e1", "temporizar\u00e1", "movimentar\u00edamos", "reemigrar\u00edamos", "estenogr\u00e1ficas", "ex\u00edmios", "indisfar\u00e7\u00e1veis", "certifica\u00e7\u00e3o", "helenizar\u00edeis", "despenhar\u00e1s", "redobr\u00e1ramos", "desprogram\u00e1ramos", "gravidar\u00edamos", "apedrej\u00e1ssemos", "espica\u00e7adelas", "lassar\u00e1s", "revi\u00e9ramos", "metamorfosear\u00edamos", "trope\u00e7o", "apedr\u00e1mos", "imortaliz\u00e1ssemos", "\u00eanclise", "solit\u00e1rias", "chocalh\u00e1sseis", "seri\u00e1mos", "abomin\u00e1vel", "falec\u00eassemos", "aterr\u00e1sseis", "amuralh\u00e1vamos", "clept\u00f3mana", "circulat\u00f3ria", "antecip\u00e1mos", "encorrilh\u00e1vamos", "mnemoniz\u00e1ramos", "enceleirar\u00e3o", "silv\u00e1ssemos", "dinamit\u00e1vamos", "dign\u00e1sseis", "petroqu\u00edmica", "pratic\u00e1reis", "canoniz\u00e1sseis", "encamisar\u00e3o", "incorp\u00f3reo", "opi\u00e1veis", "desalfandegar\u00e1s", "destro\u00e7ava", "ur\u00f3logas", "patarate\u00e1vamos", "pel\u00e1ramos", "esmurr\u00e1mos", "catit\u00e1ssemos", "impel\u00edamos", "enfolhar\u00edamos", "aclimat\u00e1ramos", "esbarr\u00e1veis", "derroc\u00e1reis", "afeg\u00e3os", "clement\u00edssimos", "afunilar\u00edamos", "inimit\u00e1vel", "desleix\u00e1vamos", "rumar\u00e1", "id\u00edlicos", "degener\u00e1veis", "republicaniz\u00e1veis", "rogat\u00f3rias", "xarop\u00e1ramos", "volt\u00e1veis", "come\u00e7adas", "jogar\u00e1", "sorv\u00edamos", "aben\u00e7oaremos", "desmonopoliz\u00e1reis", "fervilh\u00e1vamos", "miracul\u00e1mos", "acend\u00easseis", "maced\u00f3nia", "apequenar\u00edeis", "cascate\u00e1ssemos", "marinar\u00e3o", "quez\u00edlias", "artol\u00e1reis", "t\u00f3xicas", "imbuir\u00edamos", "aprovisionar\u00e1", "instil\u00e1veis", "conso\u00e1ssemos", "lamb\u00edeis", "alhear\u00e3o", "mortific\u00e1vamos", "desembrulhar\u00edeis", "redescontar\u00e1s", "respond\u00edveis", "compreender\u00e1", "ging\u00e1ssemos", "dan\u00e7aricam"]