【发布时间】:2017-03-23 23:51:22
【问题描述】:
import random, string
goal='methinks it is like a weasel'
def simulation(length):
return ''.join(random.choice('abcdefghijklmnopqrstuvwxyz ') for i in range(length))
def score(stri):
if stri==goal:
print(100)
else:
print(0)
n=0
stri='abcd'
while score(stri) != 100:
n += 1
stri = simulation(28)
print(n)
对于最后的while循环,只要 score(stri) 不等于 100,它就会迭代并累积 n,对吗?然后我会打印出累积的 n ,当 score(stri) 恰好等于 100 时。
但我得到的结果如下:
0
0
0
0
0
0
...
显然它总是输出 'n=0';因为这是全局变量?
但我随后尝试了极其简单的 while 循环:
n=0
while n <= 5:
n += 1
print(n)
成功输出6
我不知道为什么我的第一个代码出错了,猜猜while循环出错是因为def()?
【问题讨论】:
-
因为你没有从
score返回任何东西,你只是在打印,因此score返回None。而None != 100将始终评估为假。 -
请继续您正在使用的任何教程,并阅读有关函数的部分,而不是问这种基本问题。
-
郑重声明,您给出的这个示例代码,出于所有意图和目的,都是一个无限循环。 28 个值中的每一个都有 27 个选项,并且 28 个值中的每一个都必须匹配
goal才能结束循环。偶然发生的几率(忽略 PRNG 输出中可能将几率降低到 0 的循环问题)是 27 ** 28 中的 1。如果您的 RNG 是真正随机的(从不循环),它仍然会超过 132 位在你有 50% 的机会实现目标之前完成工作。相比之下,AES128 被认为是无法暴力破解的,而这只有 128 位的工作量。这要困难 10 倍以上。
标签: python function while-loop counter