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功能就可以了吗?
答案 0 :(得分:1)
这是因为python语法将方括号识别为列表。 While循环的条件必须为布尔值(True
或False
)。当您将方括号放在条件周围时,它将被视为列表。
>> [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):
第二个是多余的。