满足条件的随机数的产生及python程序

有三个变量满足

p 1 + p 2 + p 3 = n p_1+p_2+p_3=n p1+p2+p3=n

a 1 < p 1 < b 1 a_1<p_1<b_1 a1<p1<b1

a 2 < p 2 < b 2 a_2<p_2<b_2 a2<p2<b2

a 3 < p 3 < b 3 a_3<p_3<b_3 a3<p3<b3

则思路:

  • step 1:

a 3 < p 3 < b 3 a_3<p_3<b_3 a3<p3<b3

根据 p 1 + p 2 + p 3 = n p_1+p_2+p_3=n p1+p2+p3=n

a 3 < n − p 1 − p 2 < b 3 a_3<n-p_1-p_2<b_3 a3<np1p2<b3

n − ( b 3 + p 1 ) < p 2 < n − ( a 3 + p 1 ) n-(b_3+p_1)<p_2<n-(a_3+p_1) n(b3+p1)<p2<n(a3+p1)

  • step 2:

由于 a 2 < p 2 < b 2 a_2<p_2<b_2 a2<p2<b2

综上 a 2 ≤ n − ( a 3 + p 1 ) a_2\leq n-(a_3+p_1) a2n(a3+p1)

而且 b 2 ≥ n − ( b 3 + p 1 ) b_2\geq n-(b_3+p_1) b2n(b3+p1)

可得

n − ( a 2 + a 3 ) ≤ p 1 ≤ n − ( b 2 + b 3 ) n-(a_2+a_3)\leq p_1\leq n -(b_2+b_3) n(a2+a3)p1n(b2+b3)

结合 a 1 < p 1 < b 1 a_1<p_1<b_1 a1<p1<b1

可先随机取满足条件的 p 1 p_1 p1的值

  • step 3:

然后再递推回去得到满足条件的 p 2 p_2 p2的值,进而可以根据 p 1 + p 2 + p 3 = 1 p_1+p_2+p_3=1 p1+p2+p3=1确定 p 3 p_3 p3的值


Python实现:
#%%

import random

def g(x_low, x_up, x_sum, y):
if len(x_low) == 1:
y.append(x_sum)
print(x_sum)
else:
a = max(x_sum-sum(x_up[1:len(x_up)]), x_low[0])
b = min(x_sum-sum(x_low[1:len(x_low)]), x_up[0])
temp = random.uniform(a,b)
y.append(temp)
print(temp)
x_low = x_low[1:len(x_low)]
x_up = x_up[1:len(x_up)]
x_sum = x_sum - temp
g(x_low, x_up, x_sum, y)
#return y

x_low = [0, 0, 0] #即 a 1 , a 2 , a 3 = 0 a_1,a_2,a_3 = 0 a1,a2,a3=0
x_up = [1, 1, 1] #即 b 1 , b 2 , b 3 = 1 b_1,b_2,b_3 = 1 b1,b2,b3=1
x_sum =1 #即 p 1 + p 2 + p 3 = 1 p_1+p_2+p_3=1 p1+p2+p3=1
y = []
Y = []
i=0

g(x_low, x_up, x_sum, y)

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Python的datetime和random模块来实现这个功能。以下是一个示例代码: ```python import datetime import random # 获取当前时间 now = datetime.datetime.now() # 如果当前时间是周六 23点,则执行随机数函数 if now.weekday() == 5 and now.hour == 23: random_num = random.randint(0, 100) print("随机数为:", random_num) ``` 这个代码会在每周六 23 点时打印出一个 0 到 100 之间的随机数。你可以根据自己的需求,修改代码中的随机数生成范围和输出方式。 ### 回答2: Python程序可以使用datetime模块来设置定时任务。下面是使用datetime模块来实现每周六23点执行随机数函数的示例代码: ```python import datetime import random def generate_random_number(): # 随机生成一个数字 random_number = random.randint(1, 100) return random_number def execute_at_specific_time(): # 获取当前时间 current_time = datetime.datetime.now() # 获取下一个周六的日期 next_saturday = current_time + datetime.timedelta(days=(5 - current_time.weekday() + 7) % 7) # 设置定时任务的执行时间为下一个周六23点 execute_time = datetime.datetime(next_saturday.year, next_saturday.month, next_saturday.day, 23, 0, 0) # 计算距离下一个定时任务执行的时间差 time_difference = execute_time - current_time # 等待到执行时间 if time_difference.total_seconds() > 0: time.sleep(time_difference.total_seconds()) # 执行随机数函数 random_number = generate_random_number() print("本周六23点执行随机数函数,生成的随机数为:", random_number) ``` 以上代码中,`generate_random_number`函数用于生成一个随机数。`execute_at_specific_time`函数用于设置定时任务,在每次调用该函数时,程序会计算距离下一个周六23点的时间差,并将程序延迟到执行时间后再执行随机数函数。最后将生成的随机数打印出来。你可以将这段代码保存为一个Python文件,然后在每周六23点运行该文件来执行随机数函数。 ### 回答3: Python程序可以使用time模块中的函数来实现在每周六23点执行随机数函数的功能。具体实现步骤如下: 1. 首先,需要导入time模块,可以使用以下代码:import time 2. 使用time模块中的函数,获取当前时间。可以使用time.localtime()函数获取当前的本地时间,返回一个包含年、月、日、时、分、秒等字段的元组。 3. 判断当前时间是否是周六23点。可以通过访问上一步得到的元组中的字段来进行判断。如果当前时间的星期几字段(即tm_wday)等于5(表示周六)且小时字段(即tm_hour)等于23,那么满足条件。 4. 如果满足条件,调用随机数函数。具体的随机数函数可以根据需求选择,例如random模块中的random()函数可以生成一个0到1之间的随机数。调用方法为random.random()。 5. 为了能够实现每周六23点都执行,可以使用一个无限循环来不断判断时间并执行随机数函数。在每次判断时间时可以加入适当的延时,例如使用time模块中的sleep()函数来让程序休眠一段时间。 总结:以上是一种基本的实现方法,可以根据具体需求来进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值