56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
# definição de classe Estrategia
|
|
from enum import Enum
|
|
import json
|
|
import os
|
|
from types import NoneType
|
|
from hashlib import sha256
|
|
import random
|
|
|
|
|
|
class TiposEstrategia(Enum):
|
|
ALEATORIO = 0
|
|
NEUTRO = 1
|
|
TIT4TAT = 2
|
|
VINGATIVO = 3
|
|
LUNATICO = 4
|
|
|
|
|
|
# lista de estratégias. cada entrada é um dicionário com nome de estratégia
|
|
# e respectivos tracos de personalidade
|
|
lista_estrategias: dict[str, dict[str, float]] = {}
|
|
|
|
|
|
def carregarFicheirosEstrategias(pasta_estrategias: str) -> None:
|
|
lista_ficheiros: list[str] = os.listdir(pasta_estrategias)
|
|
for ficheiro_json in lista_ficheiros:
|
|
with open(f"{pasta_estrategias}/{ficheiro_json}", "r") as ficheiro:
|
|
dados = json.load(ficheiro)
|
|
lista_estrategias.update(dados)
|
|
|
|
|
|
def listaNomesEstrategias() -> list[str]:
|
|
return list(lista_estrategias.keys())
|
|
|
|
|
|
def devolvePersonalidade(nome_strat: str | None) -> dict[str, float] | None:
|
|
if isinstance(nome_strat, NoneType):
|
|
raise TypeError("estratégia {nome_strat=} não é válida")
|
|
personalidade: dict[str, float] | None = lista_estrategias.get(nome_strat)
|
|
return personalidade
|
|
|
|
|
|
# função para gerar aleatoriamente valores para BigFive (valores decimais)
|
|
def gerarBigFive_aleatorio() -> dict[str, float]:
|
|
bigfive: dict = {}
|
|
for key in "OCEAN":
|
|
bigfive[key] = random.random()
|
|
return bigfive
|
|
|
|
|
|
# função para gerar assinatura sha256 com base nos valores BigFive passados
|
|
def gerarAssinaturaBigFive(bigfive: dict[str, float]) -> str:
|
|
h = sha256()
|
|
for idx, key in enumerate(bigfive):
|
|
h.update(str(bigfive[key] ** (len(bigfive) - idx)).encode())
|
|
return h.hexdigest()
|