Add helper functions for RandomNumber
This commit is contained in:
parent
dd7da90051
commit
515c4a4871
123
helpers/randomnumber_helpers.py
Normal file
123
helpers/randomnumber_helpers.py
Normal file
@ -0,0 +1,123 @@
|
||||
from typing import Optional, Dict, Union
|
||||
import random
|
||||
from pydantic import BaseModel, validator
|
||||
|
||||
class RandomNumberConfig(BaseModel):
|
||||
min_value: int = 1
|
||||
max_value: int = 100
|
||||
exclude_numbers: list[int] = []
|
||||
|
||||
def generate_random_number(config: RandomNumberConfig) -> int:
|
||||
"""
|
||||
Generate a random integer based on provided configuration.
|
||||
|
||||
Args:
|
||||
config: Configuration settings for random number generation
|
||||
|
||||
Returns:
|
||||
int: Random number within specified range
|
||||
"""
|
||||
valid_numbers = [n for n in range(config.min_value, config.max_value + 1)
|
||||
if n not in config.exclude_numbers]
|
||||
|
||||
if not valid_numbers:
|
||||
raise ValueError("No valid numbers available in specified range")
|
||||
|
||||
return random.choice(valid_numbers)
|
||||
|
||||
def generate_random_number_sequence(
|
||||
count: int,
|
||||
config: RandomNumberConfig
|
||||
) -> list[int]:
|
||||
"""
|
||||
Generate a sequence of unique random numbers.
|
||||
|
||||
Args:
|
||||
count: Number of random numbers to generate
|
||||
config: Configuration settings for random number generation
|
||||
|
||||
Returns:
|
||||
list[int]: List of random numbers
|
||||
"""
|
||||
valid_numbers = [n for n in range(config.min_value, config.max_value + 1)
|
||||
if n not in config.exclude_numbers]
|
||||
|
||||
if len(valid_numbers) < count:
|
||||
raise ValueError(f"Cannot generate {count} unique numbers in specified range")
|
||||
|
||||
return random.sample(valid_numbers, count)
|
||||
|
||||
def validate_random_number(
|
||||
number: int,
|
||||
config: RandomNumberConfig
|
||||
) -> Union[bool, Dict[str, str]]:
|
||||
"""
|
||||
Validate if a number meets the random number criteria.
|
||||
|
||||
Args:
|
||||
number: Number to validate
|
||||
config: Configuration settings to validate against
|
||||
|
||||
Returns:
|
||||
bool if valid, error dict if invalid
|
||||
"""
|
||||
if number < config.min_value:
|
||||
return {"error": f"Number must be >= {config.min_value}"}
|
||||
|
||||
if number > config.max_value:
|
||||
return {"error": f"Number must be <= {config.max_value}"}
|
||||
|
||||
if number in config.exclude_numbers:
|
||||
return {"error": "Number is in exclude list"}
|
||||
|
||||
return True
|
||||
|
||||
def get_random_number_stats(numbers: list[int]) -> Dict[str, Union[int, float]]:
|
||||
"""
|
||||
Calculate statistics for a list of random numbers.
|
||||
|
||||
Args:
|
||||
numbers: List of numbers to analyze
|
||||
|
||||
Returns:
|
||||
Dict containing statistical measures
|
||||
"""
|
||||
if not numbers:
|
||||
return {
|
||||
"count": 0,
|
||||
"min": 0,
|
||||
"max": 0,
|
||||
"mean": 0,
|
||||
"median": 0
|
||||
}
|
||||
|
||||
sorted_nums = sorted(numbers)
|
||||
mid = len(sorted_nums) // 2
|
||||
|
||||
return {
|
||||
"count": len(numbers),
|
||||
"min": min(numbers),
|
||||
"max": max(numbers),
|
||||
"mean": sum(numbers) / len(numbers),
|
||||
"median": sorted_nums[mid] if len(numbers) % 2
|
||||
else (sorted_nums[mid-1] + sorted_nums[mid]) / 2
|
||||
}
|
||||
|
||||
def is_prime_number(number: int) -> bool:
|
||||
"""
|
||||
Check if a random number is prime.
|
||||
|
||||
Args:
|
||||
number: Number to check
|
||||
|
||||
Returns:
|
||||
bool: True if number is prime, False otherwise
|
||||
"""
|
||||
if number < 2:
|
||||
return False
|
||||
|
||||
for i in range(2, int(number ** 0.5) + 1):
|
||||
if number % i == 0:
|
||||
return False
|
||||
|
||||
return True
|
Loading…
x
Reference in New Issue
Block a user