暴力破解程序开发:变量修改未影响字符输出问题求助
嘿,我一眼就看出问题出在哪了——你把字符变量的赋值写在循环外面了,导致它们不会跟着计数器变量的变化而更新!
问题根源
你定义char1 = chars[n1]这类语句时,只是把chars列表中当前索引对应的字符值(比如初始的"a")赋值给了char1,这是一个一次性的取值操作。之后哪怕你在循环里修改了n1、n2这些计数器变量,char1这类变量也不会自动重新读取chars的新值——因为它们已经是独立的字符串变量,和n1、chars不再有动态关联了。
修复方案1:循环内重新赋值字符变量
把字符变量的赋值逻辑移到循环体内部,这样每次循环计数器变化后,都会重新从chars里取对应位置的字符:
chars = ["a", "b", "c", "d", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] n1 = 0 #for future expansion n2 = 0 n3 = 0 n4 = 0 while n1 < len(chars): # 每次循环都根据当前计数器重新获取字符 char1 = chars[n1] char2 = chars[n2] char3 = chars[n3] char4 = chars[n4] # 打印当前组合 print(f"{char1}{char2}{char3}{char4}") # 计数器进位逻辑(从低位到高位进位) n4 += 1 if n4 >= len(chars): n4 = 0 n3 += 1 if n3 >= len(chars): n3 = 0 n2 += 1 if n2 >= len(chars): n2 = 0 n1 += 1
修复方案2:直接使用索引访问(更简洁)
其实你完全可以省去单独的char1-char4变量,直接在输出时用索引访问chars,从根源避免变量同步问题:
chars = ["a", "b", "c", "d", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] n1 = 0 n2 = 0 n3 = 0 n4 = 0 while n1 < len(chars): # 直接用索引拼接字符串输出 print(f"{chars[n1]}{chars[n2]}{chars[n3]}{chars[n4]}") # 同样的进位逻辑 n4 += 1 if n4 >= len(chars): n4 = 0 n3 += 1 if n3 >= len(chars): n3 = 0 n2 += 1 if n2 >= len(chars): n2 = 0 n1 += 1
小优化:用内置模块生成字符列表
如果你不想手动写全25个小写字母(哦对,你漏了"e"),可以用Python内置的string模块自动生成,代码更简洁:
import string # 直接生成包含所有小写字母的列表 chars = list(string.ascii_lowercase) # 后续逻辑和上面两种方案一致即可
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

