در این بازی، یک عدد به شما نمایش داده میشود و شما باید آن را به عوامل اول تجزیه کنید.
sup_chars = { "1": "¹", "2": "²", "3": "³", "4": "⁴", "5": "⁵", "6": "⁶", "7": "⁷", "8": "⁸", "9": "⁹", "0": "⁰" } number = int(input("Yek adad vared konid: ")) original_number = number result = "" for i in range(2, number + 1): count = 0 while number % i == 0: count += 1 number = number // i if count > 0: if count == 1: result += f"{i} × " else: result += f"{i}{sup_chars[str(count)]} × " if number == 1: break result = result.rstrip(" × ") print(f"tajzie adad {original_number} barabar ast ba: {result}")
import random import time def is_prime(n: int) -> bool: """Check if a number is prime.""" if n < 2: return False for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False return True def get_prime_factors(n: int) -> list[int]: """Return a list of prime factors for a given number.""" factors = [] i = 2 while i * i <= n: while n % i == 0: factors.append(i) n = n // i i += 1 if n > 1: factors.append(n) return factors def get_random_number(level: int) -> int: """Generate a random number based on difficulty level.""" ranges = { 1: (10, 100), 2: (100, 1000), 3: (1000, 10000) } min_val, max_val = ranges.get(level, (10, 100)) return random.randint(min_val, max_val) def check_answer(number: int, user_factors: list[int]) -> bool: """Verify if the user's answer matches the correct prime factors.""" correct_factors = get_prime_factors(number) return sorted(user_factors) == sorted(correct_factors) def get_hint(number: int, hint_type: int) -> str: """Provide a hint based on the hint type selected.""" factors = get_prime_factors(number) hints = { 1: f"Try dividing by {random.choice([2, 3, 5])}", 2: f"One of the prime factors is: {random.choice(factors)}", 3: f"The number has {len(factors)} prime factors" } return hints.get(hint_type, "Invalid hint type") def get_valid_input(prompt: str, valid_range: tuple[int, int]) -> int: """Get and validate numeric input within a specified range.""" while True: try: value = int(input(prompt)) if valid_range[0] <= value <= valid_range[1]: return value print(f"Please enter a number between {valid_range[0]} and {valid_range[1]}") except ValueError: print("Please enter a valid number") def main() -> None: """Main game loop.""" print("Welcome to Prime Factorization Puzzle - 2 Players!") print("1: Beginner") print("2: Intermediate") print("3: Advanced") level = get_valid_input("Choose your level (1-3): ", (1, 3)) player1_name = input("Enter Player 1 name: ").strip() player2_name = input("Enter Player 2 name: ").strip() player1_score = 0 player2_score = 0 round_number = 1 TIME_LIMIT = 30 # seconds per turn while True: for current_player, score in [(player1_name, player1_score), (player2_name, player2_score)]: print(f"\nRound {round_number}: {current_player}'s turn") number = get_random_number(level) print(f"\nFactorize this number: {number}") start_time = time.time() hints_remaining = 3 while hints_remaining > 0: use_hint = input("Do you want to use a hint? (y/n): ").lower().strip() if use_hint == 'y': hint_type = get_valid_input("Which hint? (1-3): ", (1, 3)) print(get_hint(number, hint_type)) hints_remaining -= 1 print(f"Hints remaining: {hints_remaining}") elif use_hint == 'n': break else: print("Please enter 'y' or 'n'") try: remaining_time = max(0, TIME_LIMIT - (time.time() - start_time)) print(f"Time remaining: {remaining_time:.1f} seconds") factors_input = input("Enter the prime factors separated by spaces: ").strip() elapsed_time = time.time() - start_time if elapsed_time > TIME_LIMIT: print("Time's up!") print(f"The correct factorization was: {get_prime_factors(number)}") continue if not factors_input: print("Please enter some numbers!") continue user_factors = [int(x) for x in factors_input.split()] if check_answer(number, user_factors): points = max(1, int(10 - elapsed_time/3)) # More points for faster answers if current_player == player1_name: player1_score += points else: player2_score += points print(f"Correct! Time taken: {elapsed_time:.1f} seconds") print(f"Points earned: {points}") print(f"Scores - {player1_name}: {player1_score}, {player2_name}: {player2_score}") else: print(f"Wrong! The correct factorization was: {get_prime_factors(number)}") except ValueError: print("Invalid input! Please enter numbers separated by spaces.") continue round_number += 1 while True: play_again = input("Continue to next round? (y/n): ").lower().strip() if play_again in ['y', 'n']: break print("Please enter 'y' or 'n'") if play_again == 'n': break print("\nGame Over!") print("Final Scores:") print(f"{player1_name}: {player1_score}") print(f"{player2_name}: {player2_score}") if player1_score > player2_score: winner = player1_name elif player2_score > player1_score: winner = player2_name else: print("It's a tie!") return print(f"Winner: {winner}!") if __name__ == "__main__": main()