Python BruteForce HelloWorld

Python BruteForce HelloWorld,python,python-3.x,Python,Python 3.x,我正试图以暴力的方式打印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(targ

我正试图以暴力的方式打印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)
随机导入
导入系统
导入时间
TARGETARAY=[“H”,“e”,“l”,“l”,“o”,“W”,“o”,“r”,“l”,“d”]
stringArray=[,,,,,,,,,,,,,,,,,,,,,]
i=0
计数=0
而我
但当我尝试使用字符串时,它会无限地打印字符

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)
随机导入
导入系统
导入时间
targetString=“a”
字符串=[]
i=0
x=0
计数=0
打印(len(targetString))
而字符串!=目标字符串:
对于范围内的i(len(targetString)):
append(chr(random.randint(32126)))
打印(“\n”)
当x
我怎样才能使它充满活力


积分-

第一个问题是您只初始化
字符串和
x
在循环之前。因此,它不断向
字符串添加字符,并且
打印这些新字符,但是
字符串
会变得越来越长,越来越复杂
更长,并且永远不会匹配
targetString

第二个问题是
targetString
属于
str
类型,但
string
属于
list
类型,因此它们当然永远不会相等

第三个问题是我们不应该使用
string
作为标识符, 因为有一个名为
string
的标准库模块 给那个名字加阴影

不确定这是否是故意的,但在第一个程序中,您选择 一次匹配一个字符(线性时间),而在第二个字符中 在编程时,您可以一次(指数时间)选择并匹配所有对象。 实际上,甚至比指数还要糟糕:如果
targetString
是长度
N
您可以从
M
字符中进行选择(
M=95
,在给定代码中), 复杂性是
O(N*M**N)

随机导入
#导入系统#未使用
导入时间
targetString=列表(“a”)
s=[]
i=0
x=0
计数=0
打印(len(targetString))
而s!=目标字符串:
s=[]
对于范围内的i(len(targetString)):
s、 附加(chr(random.randint(32126)))
打印(“”)
x=0
当x
第一个问题是您只初始化
字符串
x
在循环之前。因此,它不断向
字符串添加字符,并且
打印这些新字符,但是
字符串
会变得越来越长,越来越复杂
更长,并且永远不会匹配
targetString

第二个问题是
targetString
属于
str
类型,但
string
属于
list
类型,因此它们当然永远不会相等

第三个问题是我们不应该使用
string
作为标识符, 因为有一个名为
string
的标准库模块 给那个名字加阴影

不确定这是否是故意的,但在第一个程序中,您选择 一次匹配一个字符(线性时间),而在第二个字符中 在编程时,您可以一次(指数时间)选择并匹配所有对象。 实际上,甚至比指数还要糟糕:如果
targetString
是长度
N
您可以从
M
字符中进行选择(
M=95
,在给定代码中), 复杂性是
O(N*M**N)

随机导入
#导入系统#未使用
导入时间
targetString=列表(“a”)
s=[]
i=0
x=0
计数=0
打印(len(targetString))
而s!=目标字符串:
s=[]
对于范围内的i(len(targetString)):
s、 附加(chr(random.randint(32126)))
打印(“”)
x=0
当x
不清楚你在问什么。。“动态”是什么意思?暴力是什么意思?
string
是一个字符串列表,而
targetstring
只是一个字符串。无论内容如何,两者永远不会相等。@ResetACK我希望它不仅适用于硬编码字符串,也适用于用户输入的输入值。@MisterMiyagi首先我将其视为仅字符串,但当时我只面临相同的问题,所以我尝试了列表。不清楚您在问什么。。“动态”是什么意思?暴力是什么意思?
string
是一个字符串列表,而
targetstring
只是一个字符串。无论内容如何,两者永远不会相等。@ResetACK我希望它不仅适用于硬编码字符串,也适用于用户输入的输入值。@MisterMiyagi首先我将其视为仅字符串,但当时我只面临相同的问题,所以我尝试了列表。感谢您的澄清。但我还是不明白,第一,它仍然是同时检查所有字符,而不是像第一种情况那样一次检查一个字符。第二,它确实可以工作,但与第一个相比,它需要很多时间,我如何降低它的复杂性?好吧……我猜当你说“动态”时,你的意思是“在运行时输入的字符串上操作”而不是“在硬编码字符串上操作”。如果这是您的意图,那么只需使用问题中的第一个程序,但输入用户的字符串,并将其转换为字符列表
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)