<p><code>random.choices()</code>正在返回一个列表,因此它永远不会像返回<code>success == ['True']</code>那样返回<code>success == True</code>。尝试修复以下问题:</p>
<pre><code>success = random.choices(arrive, weights=(100 - (q * 100), q * 100), k=1)[0]
</code></pre>
<p>其次,你可能需要稍微调整一下你的功能。您的最大座位数为100…然后在100个座位中选择.30真、.70假。要超额预订,您需要所有的Pasanger返回为True(这样您将有乘客>;n-1(即100名乘客>;99名乘客)</p>
<p>你必须把你的q改为一个很小的概率(即,一个乘客确实表现出的高概率,这样你就可以得到所有100人都出现的情况)</p>
<p>这样想吧,如果你把一枚硬币掷100次,你需要100个硬币的正面大于100-1。如果硬币的重量是0.30个正面和0.70个反面……理论上这是可能发生的(你可以计算出概率),你将“永远不会”实验/模拟得到100个头部。你需要一个重量为.999个头部和.001个尾巴的物体,这样你才有机会在100次投掷中得到100个头部</p>
<pre><code>import random
arrive = [True, False]
def airline_a(q, n, sims):
sim_counter = 0
reserved_seats = []
overbooked = 0
for x in range(n):
reserved_seats.append(x)
alpha = 100 - (q * 100)
beta = q * 100
while sim_counter != sims:
passengers = 0
for x in range(len(reserved_seats)):
success = random.choices(arrive, weights=(alpha, beta), k=1)[0]
if success == True:
passengers += 1
if passengers > n - 1:
overbooked += 1
sim_counter += 1
print("Results: ")
print(f"Probability that Airline A is overbooked: ", overbooked / sims)
airline_a(.001, 100, 1000)
</code></pre>
<p>给了我一个输出:</p>
<pre><code>Results:
Probability that Airline A is overbooked: 0.906
</code></pre>
<p>你可以通过数学方法来解决这个问题,而不是通过模拟</p>