From 1086acdbe963ffccba6330db88bd1d738d8140f7 Mon Sep 17 00:00:00 2001 From: Donald Calloway Date: Sat, 25 Oct 2025 18:35:35 -0700 Subject: [PATCH] Updating with latest version --- european_roulette.py | 180 +++++++++++++++++++++++++++---------------- 1 file changed, 112 insertions(+), 68 deletions(-) diff --git a/european_roulette.py b/european_roulette.py index 55af1f0..c7d8a78 100644 --- a/european_roulette.py +++ b/european_roulette.py @@ -220,8 +220,9 @@ def display_board(): playing = True dict_list = [] wager_type_list = [] +bet = "" wagers = [] - +DEBUG = False def spin_wheel()-> int: print() @@ -248,7 +249,7 @@ def build_a_list_of_wager_types(): print(f"Wager dict: {wager_dict}") if isinstance(wager_dict, dict): wager_type_list.append(wager_dict) - build_a_list_of_wagers() + build_a_dict_of_wagers(selected_key) else: print(f"'{selected_key}' exists but is not a dictionary.") else: @@ -261,49 +262,70 @@ def build_a_list_of_wager_types(): return wager_type_list -def build_a_list_of_wagers(): - wager = input("Enter a wager for this wager_type (e.g. 10 for $10) ") +def build_a_dict_of_wagers(code): + bet = input("Enter a wager for this wager_type (e.g. 10 for $10) ") + wager = {code: bet} wagers.append(wager) if DEBUG: print(f"Wagers: {wagers}") return wagers - + def search_number_in_dicts(dict_list: list, number_to_find: int): - results = {} - for i, d in enumerate(dict_list): - if isinstance(d, dict): # Only process if it's a dictionary - matching_keys = [ k for k, v in d.items() - if ( (isinstance(v, (list, tuple, set)) and number_to_find in v) or - (isinstance(v, str) and str(number_to_find) in v) or - (v == number_to_find) ) ] - if matching_keys: - results[f'dict_{i+1}'] = matching_keys - if DEBUG: - print(f"Results: {results}") - else: print(f"Warning: Item at index {i} is not a dictionary. Skipping.") - return results + matched_results = {} + unmatched_results = {} + + for i, d in enumerate(dict_list): + if not isinstance(d, dict): + print(f"Warning: Item at index {i} is not a dictionary. Skipping.") + continue + + matched_keys = [] + unmatched_keys = [] + + for k, v in d.items(): + if ( + (isinstance(v, (list, tuple, set)) and number_to_find in v) or + (isinstance(v, str) and str(number_to_find) in v) or + (v == number_to_find) + ): + matched_keys.append(k) + else: + unmatched_keys.append(k) + + if matched_keys: + matched_results[f'dict_{i+1}'] = matched_keys + if DEBUG: + print(f"Matched Results for dict_{i+1}: {matched_keys}") + if unmatched_keys: + unmatched_results[f'dict_{i+1}'] = unmatched_keys + if DEBUG: + print(f"Unmatched Results for dict_{i+1}: {unmatched_keys}") + + if DEBUG: + print(f"\nFinal Matched keys: {matched_results}") + print(f"Final Unmatched keys: {unmatched_results}") + + return matched_results, unmatched_results def tuple_matches_pattern(data, pattern): return any(re.search(pattern, item) for item in data) - def match_wager_type(code): if DEBUG: print(f"Code: {code}") + for wager_type, pattern in WAGER_PATTERNS.items(): if re.fullmatch(pattern, code) or re.match(pattern, code): if DEBUG: print(f"Wager type from match_wager_type(code): {wager_type}") return wager_type - return None # ← Only return None after all patterns have been checked - - -DEBUG = True + + def log_match(wager_code, wager_amount, wager_type, payout): if DEBUG: @@ -313,22 +335,59 @@ def log_match(wager_code, wager_amount, wager_type, payout): def log_unmatched(wager_code, wager_amount, wager_type): if DEBUG: print(f"Unmatched wager code: {wager_code} as {wager_type} → {wager_amount} × -1 = {wager_amount * -1}") + unmatched = [] + if wager_type is None: + losses += wager_amount + unmatched.append((wager_code, wager_amount)) def calculate_profits(): - profits = 0 - for sublist in wager_types_and_wagers: - wager_code = sublist[0] - wager_amount = int(sublist[1]) - wager_type = match_wager_type(wager_code) + profits = 0 + for item in wagers: + for key, value in item.items(): + if DEBUG: + print(f"Line 346: Wager types and wagers: {wagers}") + wager_code = key + wager_amount = int(value) + for k, v in matched_results.items(): + if DEBUG: + print(f"k is {k} and v is {v}") + print(f"Wager code is: {wager_code}") + wager_type = match_wager_type(wager_code) + payout = int(payouts.get(wager_type, 0)) + if str(wager_code) in v: + profits += wager_amount * payout + if DEBUG: - print(f"Wager type: {wager_type}") - if wager_type: - print(f"DEBUG: wager_code={wager_code}, matched_type={wager_type}") - payout = int(payouts.get(wager_type, 0)) - log_match(wager_code, wager_amount, wager_type, payout) - profits += wager_amount * payout + print(f"Wager type: {wager_type}") return profits + +def calculate_losses(): + losses = 0 + for item in wagers: + for key, value in item.items(): + if DEBUG: + print(f"Line 366: Wager types and wagers: {wagers}") + wager_code = key + wager_amount = int(value) + for k, v in unmatched_results.items(): + if DEBUG: + print(f"k is {k} and v is {v}") + print(f"Wager code is: {wager_code}") + if str(wager_code) in v: + losses += wager_amount + if DEBUG: + print(f"LOSS → code: {wager_code}, amount: {wager_amount}") + wager_type = match_wager_type(wager_code) + + if DEBUG: + print(f"Wager for type: {wager_amount}") + + if DEBUG: + print(f"DEBUG: wager_code={wager_code}, wager_type={repr(wager_type)}") + + return losses + # ----------------------------- G A M E P L A Y --------------------------------- @@ -340,47 +399,32 @@ while playing: # User selects which dictionaries to search for number the wheel returns wager_type_list = build_a_list_of_wager_types() #number = spin_wheel() - results = search_number_in_dicts(wager_type_list, 32) + matched_results, unmatched_results = search_number_in_dicts(wager_type_list, 4) - flat_list = [item for sublist in results.values() for item in sublist] + flat_list = [item for sublist in matched_results.values() for item in sublist] wager_types_and_wagers = list(zip(flat_list, wagers)) if DEBUG: print(f"Wager types and wagers list: {wager_types_and_wagers}") + profits = calculate_profits() - holdings += profits - print(f"Your total profits are: ${profits} and current holdings are: ${holdings}") + + flat_list = [item for sublist in unmatched_results.values() for item in sublist] + if DEBUG: + print(f"Line 404: {flat_list}") + wager_types_and_wagers = list(zip(flat_list, wagers)) + if DEBUG: + print(f"Line 407: {wagers}") + print(f"Line 405: wager_types_and_wagers: {wager_types_and_wagers}") + + losses = calculate_losses() + + holdings += (profits - losses) + print(f"Your profits are: ${profits} and losses are {losses} yielding current holdings: ${holdings}") + keep_current_wagers = input("Do you want to leave your wagers on the table? (y/n): ").lower() + if keep_current_wagers != 'y': + wagers.clear() playing_again = input("Do you want to keep playing? (y/n) ") - wagers.clear() if playing_again != "y": playing = False else: continue - -''' unmatching_keys = [ k for k, v in d.items() - if ( (isinstance(v, (list, tuple, set)) and number_to_find in v) or - (isinstance(v, str) and str(number_to_find) in v) or - (v != number_to_find) ) ]''' - -'''def search_number_in_dicts(dict_list: list, number_to_find: int): - results = {} - for i, d in enumerate(dict_list): - if isinstance(d, dict): # Only process if it's a dictionary - matched = [] - unmatched = [] - for k, v in d.items(): - if ( - (isinstance(v, (list, tuple, set)) and number_to_find in v) or - (isinstance(v, str) and str(number_to_find) in v) or - (v == number_to_find) - ): - matched.append(k) - print(matched) - else: - unmatched.append(k) - results[f'dict_{i+1}'] = { - 'matched_keys': matched, - 'unmatched_keys': unmatched - } - else: - print(f"Warning: Item at index {i} is not a dictionary. Skipping.") - return results''' \ No newline at end of file