#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2025/3/15 17:01 # @Author : AngesZhu # @File : random_utils.py # @Desc : 随机数字 import random import string from typing import Union, List class RandomGenerator: def __init__(self): self.letters = string.ascii_letters self.digits = string.digits self.special_chars = string.punctuation def generate_number(self, min_val: Union[int, float] = 0, max_val: Union[int, float] = 100, decimal_places: int = 2, is_percentage: bool = False) -> Union[int, float]: """ 生成随机数字 :param min_val: 最小值 :param max_val: 最大值 :param decimal_places: 小数位数(仅当结果为浮点数时有效) :param is_percentage: 是否生成百分比数 :return: 随机数字 """ if isinstance(min_val, int) and isinstance(max_val, int): result = random.randint(min_val, max_val) else: result = round(random.uniform(min_val, max_val), decimal_places) return result / 100 if is_percentage else result def generate_letter(self, uppercase: bool = False) -> str: """ 生成随机字母 :param uppercase: 是否大写 :return: 随机字母 """ return random.choice(string.ascii_uppercase if uppercase else string.ascii_lowercase) def generate_special_char(self) -> str: """ 生成随机特殊字符 :return: 随机特殊字符 """ return random.choice(self.special_chars) def generate(self, types: List[str] = ['number', 'letter', 'special'], length: int = 1, **kwargs) -> Union[str, List[str]]: """ 综合生成器 :param types: 生成类型列表,可选:'number', 'letter', 'special' :param length: 生成结果的长度 :param kwargs: 其他参数,传递给具体的生成方法 :return: 随机生成结果 """ if not types: raise ValueError("至少需要指定一种生成类型") generators = { 'number': self.generate_number, 'letter': self.generate_letter, 'special': self.generate_special_char } results = [] for _ in range(length): chosen_type = random.choice(types) generator = generators[chosen_type] results.append(str(generator(**kwargs.get(chosen_type, {})))) return results[0] if length == 1 else results # 使用示例 if __name__ == "__main__": rg = RandomGenerator() # 生成一个随机整数 print(rg.generate(types=['number'], number={'min_val': 1, 'max_val': 100})) # 生成一个随机小数(保留2位) print(rg.generate(types=['number'], number={'min_val': 0.0, 'max_val': 1.0, 'decimal_places': 15})) # 生成一个随机百分比数 print(rg.generate(types=['number'], number={'is_percentage': True})) # 生成一个随机大写字母 print(rg.generate(types=['letter'], letter={'uppercase': True})) # 生成一个随机特殊字符 print(rg.generate(types=['special'])) # 生成10个随机字符(包含数字、字母、特殊字符) print(rg.generate(length=10)) # 生成5个随机字符(仅包含字母和数字) print(rg.generate(types=['number', 'letter'], length=5)) print(rg.generate(types=['number', 'letter'], letter={'uppercase': True}, length=5))