Python BruteForce HelloWorld
我正试图以暴力的方式打印Hello World,我看过这段代码并尝试过它,它工作得很好,但当我试图使其动态化时,它就不起作用了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
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)