我正试图强力地打印Hello World,我看过这段代码并尝试过,它工作得很好,但当我试图使它动态时,它就不起作用了。
import random
import sys
import time
targetArray = ["H",'e','l',"l","o"," ", "W", "o", "r","l","d" ]
stringArray = ["","","","","","","","","","",""]
i=0
count = 0
while i < len(targetArray):
if stringArray[i] != targetArray[i]:
stringArray[i] = chr(random.randint(0,256))
if stringArray[i] == targetArray[i]:
i += 1
x = 0
print("\n")
while x< len(stringArray):
print(stringArray[x] , end = "" , flush = True)
x += 1
count += 1
time.sleep(.01)
print("\nTotal Gusses is :",count)
但是当我尝试使用String时,它会无限地打印char。
import random
import sys
import time
targetString = "a"
string = []
i=0
x = 0
count = 0
print(len(targetString))
while string != targetString:
for i in range(len(targetString)):
string.append(chr(random.randint(32,126)))
print("\n")
while x< len(string):
print(string[x] , end = "")
x += 1
count += 1
time.sleep(.01)
print("\nTotal Gusses is :",count)
我怎样才能使它动态化呢?
credits - https://imgur.com/fNjhjUS
发布于 2018-05-28 13:32:51
第一个问题是您只在循环之前初始化string
和x
。因此,它不断地向string
添加字符,并打印这些新字符,但是string
变得越来越长,并且永远不会与targetString
匹配。
第二个问题是targetString
的类型是str
,而string
的类型是list
,所以它们当然永远不会相等。
第三个问题是,我们不应该使用string
作为标识符,因为有一个名为string
的标准库模块,这会隐藏该名称。
不确定这是否是故意的,但在第一个程序中,您一次选择并匹配一个字符(线性时间),而在第二个程序中,您一次选择并匹配所有字符(指数时间)。实际上,比指数还要糟糕:如果targetString
是length N
,并且您从M
字符(在给定代码中为M = 95
)中进行选择,则复杂度为O(N * M ** N)
。
import random
#import sys # not used
import time
targetString = list("a")
s = []
i = 0
x = 0
count = 0
print(len(targetString))
while s != targetString:
s = []
for i in range(len(targetString)):
s.append(chr(random.randint(32,126)))
print("")
x = 0
while x < len(s):
print(s[x], end="")
x += 1
count += 1
time.sleep(.01)
print("\nTotal Guesses is :",count)
https://stackoverflow.com/questions/50559303
复制相似问题