refactor: vytažení funkcí z evaluate
Funkce eval_score vytažena z evaluate; translate_letters_to_numbers, pick_throw_proc a eval_wrapper nově vytvořeny z fragmentů evaluate. Oproti dřívějšímu pokusu odstraněny i přesunuté (redundantní) řádky.
This commit is contained in:
1 parent
caa743fcc9
commit
e9cf875192
1 file changed
+102
-76
+102
-76
@@ -53,36 +53,111 @@ def show_throw(throw: str) -> str:
|
|||||||
def clear() -> None:
|
def clear() -> None:
|
||||||
_ = system('cls') if name == 'nt' else system('clear')
|
_ = system('cls') if name == 'nt' else system('clear')
|
||||||
|
|
||||||
|
def translate_letters_to_numbers(inp_hod: str, count: int) -> tuple[bool, str]:
|
||||||
|
inp_temp: str = ""
|
||||||
|
for x in inp_hod:
|
||||||
|
x_int: int = ord(x)-96
|
||||||
|
if x_int > count:
|
||||||
|
ran = "1" if count == 1 else f"1–{count}"
|
||||||
|
return False, f"Zvolte prosím kostky v platném rozsahu ({ran}): "
|
||||||
|
else:
|
||||||
|
inp_temp += str(x_int)
|
||||||
|
|
||||||
|
return True, inp_temp
|
||||||
|
|
||||||
|
def pick_throw_proc(count: int, inp_hod: str, throw: str) -> tuple[str, str]:
|
||||||
|
old_throw: list[str] = []
|
||||||
|
pick: list[str] = []
|
||||||
|
for y in range(count):
|
||||||
|
if str(y+1) not in inp_hod:
|
||||||
|
old_throw.append(throw[y])
|
||||||
|
if str(y+1) in inp_hod:
|
||||||
|
pick.append(throw[y])
|
||||||
|
|
||||||
|
old_throw_str: str = "".join(old_throw)
|
||||||
|
pick.sort()
|
||||||
|
pick_str: str = "".join(pick)
|
||||||
|
|
||||||
|
return old_throw_str, pick_str
|
||||||
|
|
||||||
|
def eval_score(pick: str) -> int:
|
||||||
|
score = 0
|
||||||
|
pick_counter = Counter(pick)
|
||||||
|
while pick_counter:
|
||||||
|
bool_temp = False
|
||||||
|
for k in hodnoty:
|
||||||
|
k_counter = Counter(k)
|
||||||
|
if k_counter <= pick_counter:
|
||||||
|
pick_counter = pick_counter - k_counter
|
||||||
|
score += hodnoty[k]
|
||||||
|
bool_temp = True
|
||||||
|
|
||||||
|
if not bool_temp:
|
||||||
|
break
|
||||||
|
|
||||||
|
if pick_counter:
|
||||||
|
score = 0
|
||||||
|
|
||||||
|
return score
|
||||||
|
|
||||||
|
def eval_wrapper(count: int, throw: str, inp_hod: str) -> tuple[bool, int, int, str]:
|
||||||
|
if not inp_hod:
|
||||||
|
data = (
|
||||||
|
True,
|
||||||
|
0,
|
||||||
|
count,
|
||||||
|
"",
|
||||||
|
)
|
||||||
|
elif re.search(r"^[a-f]+$", inp_hod):
|
||||||
|
if len(inp_hod) > count:
|
||||||
|
data = (
|
||||||
|
False,
|
||||||
|
0,
|
||||||
|
count,
|
||||||
|
"Tolika kostkami nemůžete hodit. Zkuste to znovu: ",
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
tltn = translate_letters_to_numbers(inp_hod, count)
|
||||||
|
if tltn[0]:
|
||||||
|
inp_hod = tltn[1]
|
||||||
|
|
||||||
|
old_throw_str, pick_str = pick_throw_proc(count, inp_hod, throw)
|
||||||
|
|
||||||
|
new_count: int = len(old_throw_str)
|
||||||
|
|
||||||
|
score = eval_score(pick_str)
|
||||||
|
|
||||||
|
if not score:
|
||||||
|
new_count = count
|
||||||
|
old_throw_str = throw
|
||||||
|
|
||||||
|
data = (
|
||||||
|
True,
|
||||||
|
score,
|
||||||
|
new_count,
|
||||||
|
"",
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
data = (
|
||||||
|
False,
|
||||||
|
0,
|
||||||
|
count,
|
||||||
|
tltn[1]
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
data = (
|
||||||
|
False,
|
||||||
|
0,
|
||||||
|
count,
|
||||||
|
"Zadejte prosím platnou hodnotu: ",
|
||||||
|
)
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
def evaluate(inp: Any, count: int, throw: str) -> tuple[Any, ...]:
|
def evaluate(inp: Any, count: int, throw: str) -> tuple[Any, ...]:
|
||||||
|
|
||||||
global h_bool
|
global h_bool
|
||||||
|
|
||||||
def eval_score(pick: str) -> bool:
|
|
||||||
global score
|
|
||||||
score_temp = 0
|
|
||||||
pick_ok = False
|
|
||||||
pick_counter = Counter(pick)
|
|
||||||
while pick_counter:
|
|
||||||
bool_temp = False
|
|
||||||
for k in hodnoty:
|
|
||||||
k_counter = Counter(k)
|
|
||||||
if k_counter <= pick_counter:
|
|
||||||
pick_counter = pick_counter - k_counter
|
|
||||||
score_temp += hodnoty[k]
|
|
||||||
pick_ok = True
|
|
||||||
bool_temp = True
|
|
||||||
|
|
||||||
if not bool_temp:
|
|
||||||
break
|
|
||||||
|
|
||||||
print(pick_counter)
|
|
||||||
if pick_counter:
|
|
||||||
pick_ok = False
|
|
||||||
else:
|
|
||||||
score += score_temp
|
|
||||||
|
|
||||||
return pick_ok
|
|
||||||
|
|
||||||
def next_player() -> None:
|
def next_player() -> None:
|
||||||
global pointer
|
global pointer
|
||||||
|
|
||||||
@@ -95,57 +170,8 @@ def evaluate(inp: Any, count: int, throw: str) -> tuple[Any, ...]:
|
|||||||
pointer = nxt_key
|
pointer = nxt_key
|
||||||
|
|
||||||
inp = str(inp)
|
inp = str(inp)
|
||||||
inp_temp: str = ""
|
|
||||||
|
|
||||||
if re.search(r"^[a-f]+$", inp):
|
if inp == "h":
|
||||||
if len(inp) > count:
|
|
||||||
data: tuple[Any, ...] = (
|
|
||||||
"msg",
|
|
||||||
"ER01",
|
|
||||||
"Tolika kostkami nemůžete hodit. Zkuste to znovu: ",
|
|
||||||
count,
|
|
||||||
throw
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
for x in inp:
|
|
||||||
x = ord(x)-96
|
|
||||||
if x > count:
|
|
||||||
ran = "1" if count == 1 else f"1–{count}"
|
|
||||||
data = (
|
|
||||||
"msg",
|
|
||||||
"ER02",
|
|
||||||
f"Zvolte prosím kostky v platném rozsahu ({ran}): ",
|
|
||||||
count,
|
|
||||||
throw
|
|
||||||
)
|
|
||||||
return data
|
|
||||||
else:
|
|
||||||
inp_temp += str(x)
|
|
||||||
inp = inp_temp
|
|
||||||
|
|
||||||
old_throw: list[str] = []
|
|
||||||
pick: list[str] = []
|
|
||||||
for y in range(count):
|
|
||||||
if str(y+1) not in inp:
|
|
||||||
old_throw.append(throw[y])
|
|
||||||
if str(y+1) in inp:
|
|
||||||
pick.append(throw[y])
|
|
||||||
|
|
||||||
old_throw_str: str = "".join(old_throw)
|
|
||||||
pick.sort()
|
|
||||||
pick_str: str = "".join(pick)
|
|
||||||
|
|
||||||
new_count: int = len(old_throw_str)
|
|
||||||
|
|
||||||
if not eval_score(pick_str):
|
|
||||||
new_count = count
|
|
||||||
old_throw_str = throw
|
|
||||||
else:
|
|
||||||
h_bool = False
|
|
||||||
|
|
||||||
data = ("count", new_count, old_throw_str)
|
|
||||||
|
|
||||||
elif inp == "h":
|
|
||||||
if h_bool:
|
if h_bool:
|
||||||
clear()
|
clear()
|
||||||
input("Nemůžete házet znovu, dokud nevyhodnotíte některé kostky.")
|
input("Nemůžete házet znovu, dokud nevyhodnotíte některé kostky.")
|
||||||
|
|||||||
Reference in new issue
Block a user