求一个生成n个不相同数值的python代码?

底价为125.5元的产品,如何生成10条不低于底价且每条报价高于底价不能超过底价的(100分之一到200分之一间的数)并且10条报价不能相同(报价要相对自然,不是每一个多固定数的那种)的python代码

阅读 938
avatarAI BotBETA

要生成10个不同的报价,这些报价应该在底价的100分之一到200分之一之间,并且每条报价高于底价,可以使用Python的random库来实现。下面是一个简单的Python代码示例,用于生成满足这些条件的报价列表:

import random

def generate_quotes(base_price, num_quotes, min_fraction=0.01, max_fraction=0.005):
    quotes = []
    fractions = [f for f in (random.uniform(min_fraction, max_fraction) for _ in range(num_quotes)) if f != fractions[i-1] for i in range(1, num_quotes)]
    for fraction in fractions:
        quotes.append(base_price * (1 + fraction))
    return quotes

# 设置底价
base_price = 125.5
# 生成10个报价
quotes = generate_quotes(base_price, 10)

# 打印结果
for i, quote in enumerate(quotes, start=1):
    print(f"报价{i}: {quote:.2f}")

在这个例子中,generate_quotes 函数接受底价、要生成的报价数量和报价的分数范围(默认是底价的1%到0.5%)。它首先生成一个分数的列表,确保这些分数是唯一的(通过列表推导式和if条件判断),然后基于这些分数和底价计算每条报价,并将它们添加到报价列表中。

请注意,由于我们是在一个很小的范围内(0.01到0.005)生成随机数,所以有可能在尝试生成10个不重复的随机数时遇到重复的情况。为了避免这种情况,我们使用了列表推导式中的if条件来检查新生成的随机数是否与前一个随机数相同,并在这种情况下重新生成随机数。

最后,代码将生成的报价列表打印出来,每条报价保留两位小数。

4 个回答
import random

l = random.sample(range(round(12550/200), round(12550/100)), 10)
for i in l:
    print(f"{i/100+125.5:.2f}")
import random

base_price = 125.5
num_quotes = 10

quotes = set()  # 使用集合来存储报价,确保不会有重复的报价

while len(quotes) < num_quotes:  # 用循环生成指定数量的随机报价
    deviation = random.uniform(1/100, 1/200)  # 生成100分之一到200分之一间的随机数作为偏差
    price = base_price * (1 + deviation)  # 计算报价
    if price >= base_price:  # 检查报价是否符合条件
        quotes.add(round(price, 2))  # 将符合条件的报价加入到集合中

print(sorted(quotes))  # 输出按顺序排列的报价
# 引入random模块,用于生成随机数
import random

# 定义底价
base_price = 125.5

# 定义报价数量和价格浮动区间
num_quotes = 10
min_increase_ratio = 1 / 100
max_increase_ratio = 1 / 200

# 使用集合来存储唯一报价,集合中的元素不允许重复
quotes_set = set()

# 循环生成不同报价,直到收集到num_quotes个不同的报价
while len(quotes_set) < num_quotes:
    # 在给定的价格浮动区间内生成一个随机比例
    increase_ratio = random.uniform(min_increase_ratio, max_increase_ratio)
    
    # 计算报价价格,确保报价不低于底价
    quote_price = base_price * (1 + increase_ratio)
    quote_price = max(quote_price, base_price)

    # 将报价四舍五入到小数点后两位,并添加到集合中,集合会自动去重
    quotes_set.add(round(quote_price, 2))

# 将集合转换为列表以便于查看和操作
quotes_list = list(quotes_set)

# 输出生成的不同报价
print("Generated unique quotes: ", quotes_list)
新手上路,请多包涵

具体代码实现如下:

import random  
  
# 定义底价  
base_price = 125.5  
  
# 生成报价的函数  
def generate_quote():  
    # 生成一个介于1/100到1/200之间的随机小数  
    increment_ratio = random.uniform(1/100, 1/200)  
    # 确保报价不低于底价且不是整数倍  
    quote = base_price + base_price * increment_ratio  
    # 稍微调整报价,使其看起来更自然  
    quote += random.uniform(-0.01, 0.01)  
    return round(quote, 2)  # 保留两位小数  
  
# 生成10条报价,并确保它们不重复  
quotes = []  
while len(quotes) < 10:  
    new_quote = generate_quote()  
    if new_quote not in quotes:  
        quotes.append(new_quote)  
  
# 打印报价  
for i, quote in enumerate(quotes, start=1):  
    print(f"报价{i}: {quote}元")
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题