谁能帮忙解释一下为什么删除方括号会使功能正常工作?

时间:2020-01-25 03:42:25

标签: python montecarlo

def roll(M=100,T=100,N=6):
trails=[]
N_plus_1=N+1
for m in range(M):
    collection=[random.randrange(1,N_plus_1)]
    while [sum(collection)<T]:
        collection.append(random.randrange(1,N_plus_1))
    trials.append(len(collection))
return sum(trials)/len(trials) 

为什么下面的roll功能会永远运行,而ddoesnt却会给出答案。但是,如果我从while循环条件中删除了方括号,那么roll功能就可以了吗?

3 个答案:

答案 0 :(得分:1)

这是因为python语法将方括号识别为列表。 While循环的条件必须为布尔值(TrueFalse)。当您将方括号放在条件周围时,它将被视为列表。

>> [sum(collection) < T]
[True] # a list with True
>> sum(collection) < T
True   # a boolean

答案 1 :(得分:1)

如果您在python命令行中运行:

if [True]:
  print("true")

它打印: 是

if [False]:
  print("true")

它打印: 是

带有[False]的if条件评估为true,这就是为什么它永远循环的原因。

[False]或[True]是一个包含一个元素的列表。

尝试:

type([False])
or
type([True])

它返回:

实际上,空列表的值为False。

if []:
  print("true")
else:
  print("false")

打印错误

答案 2 :(得分:0)

操作时:

while [sum(collection)<T]:

您正在有效地创建一个包含表达式结果的列表,该表达式的结果始终为True,因为该列表永远不会被清空。您需要使用()或不使用任何内容:

while sum(collection)<T:

# Or

while (sum(collection)<T):

第二个是多余的。

相关问题