【发布时间】:2020-08-28 10:41:21
【问题描述】:
因此,我在此代码中的主要目标是检查随机生成的数字 (s) 是否等于随机生成的数字列表中的任何其他组件。如果是这种情况,则应将已检查的号码添加到单个随机生成的号码中,标记为“已使用”,从列表中退出,然后重新开始该过程。如果有两个或多个数字不如单个随机生成的数字,都应“标记”并从列表中退出,但仅应将两个数字中最大的一个添加到单个生成的数字中下一个循环。最后它应该说明需要多少次循环才能将列表中的所有随机数“标记”并使用,或者循环通过而没有任何数字被“标记”
由于这个解释可能不清楚,我将在这里举一个例子。想象一下生成的单个数字 (s) 是 0.2,而随机生成的数字列表是 (0.2, 0.3, 0.4, 0.5)。该算法将首先检查 s 与 0.2,如果相等,s 将变为 0.2 + 0.2 = 0.4,0.2 将被“标记”并从池中退出,并且将开始一个新循环。在下一个循环中,算法将检查 0.3 和 0.4 是否等于或小于新的 s (0.4),因此两者都将被“标记”、停用,s 将变为 0.2 + 0.4 = 0.6。在最后一个循环中,0.5 将被标记并停用,s 将变为 0.2 + 0.5 = 0.7,需要 3 次循环来标记所有数字。
到目前为止,我已经想出了这个(请忽略有关随机数生成的规范)
import random
import numpy as np
for x in range(0, 101):
s = random.gauss(0.5, 1)
s = round(s, 2)
if s < 0:
s = 0
if s > 1:
s = 1
print("This is S")
print(s)
ai = []
ai_size = 10
for i in range(ai_size):
num = float(random.gauss(0.5,1))
num = round(num, 2)
if num < 0:
num = 0
if num > 1:
num = 1
ai.append(num)
print("This is the vector of Ai")
print(ai)
ai = sorted(ai)
print("This is the vector numerically ordered")
print(ai)
ai_mean = (np.mean(ai))
ai_var = (np.var(ai))
print(ai_mean)
print(ai_var)
rev = 0
loop = 0
for i in ai:
if s >= i:
s += i
rev += 1
loop += 1
print("This is evolving S")
print(s)
else:
break
print("Loop is over")
print("This is the number of elements within the list that are marked")
print(rev)
print("This is the number of loops")
print(loop)
ai_percentage = rev / ai_size * 100
print("This is the percentage")
print(ai_percentage)
这段代码的问题主要在于,当在任何给定循环中应该标记和退出多个数字时,它只会在进入下一个循环之前检查第一个数字,这意味着它总是以已标记的相同数量的循环和数字(而在很多情况下,循环的数量应该更小)。它还使 S 成为所有标记数字的连续总和(在前面的示例中,它将执行 0.2 + 0.2 + 0.3 + 0.4 + 0.5),而不是像我之前解释的那样保持原始 S 不变并仅添加最高标记数字在示例中。
任何与此相关的想法或提示将不胜感激。
【问题讨论】:
-
TLDR;你有什么问题?
-
我的主要问题是我的代码不是将列表的所有数字与单个数字进行比较,而是仅在开始下一个之前满足比较要求的列表的第一个数字循环,人为地增加进行所有比较所需的循环次数
-
对代码风格的注释:变量名应该以小写字母开头,大写开头是为Python中的类名保留的。
-
我感觉如果这是一个更大系统的一部分,可能有更简单的方法来解决问题。是这样吗?或者这可能只是一个奇怪的特定编码挑战?
标签: python