我只是在这段代码底部的 if
循环中遗漏了一些东西。我已经尝试过 ifs 和 buts 和上帝知道的每一种组合,但事情就是不好玩。有人可以帮忙吗?
def main():
print("Password Checker Program 3\nDeveloped by Benjamin Roberts\n17/May/2022\n")
short_password = 0
long_password = 0
TOO_SHORT = str("< 6")
TOO_LONG = str("> 10")
temp_file = open("ITWorks_password_log.txt", "r")
for line in temp_file:
bad_words = [line]
print(line)
for line in bad_words:
if str(TOO_SHORT) in line:
short_password = short_password + 1
if str(TOO_LONG) in line:
long_password = long_password + 1
print(f"There are {short_password} passwords that are too long.\n")
print(f"There are {long_password} passwords that are too short.\n")
输出:
>>> %Run PASSWORD_CHECKER3_BEN_ROBERTS.py
Password Checker Program 3
Developed by Benjamin Roberts
17/May/2022
2021-07-22 16:24:42.843103, password < 6
2021-07-22 16:24:44.963020, password < 6
2021-07-22 16:24:49.327202, password > 10
2021-07-22 16:24:52.810838, password > 10
2021-07-22 16:24:57.057562, password > 10
2021-07-22 16:24:58.961836, password < 6
2021-07-22 16:25:00.181773, password < 6
2021-07-22 16:25:01.408118, password < 6
2021-07-22 16:25:02.629833, password < 6
2021-07-22 16:25:03.484845, password < 6
2021-07-22 16:25:04.208258, password < 6
2021-07-22 16:25:04.939255, password < 6
2021-07-22 16:25:05.643320, password < 6
2021-07-22 16:25:09.730280, password > 10
2021-07-22 16:25:33.497937, password < 6
2021-07-22 16:25:34.746323, password < 6
2021-07-22 16:26:00.286218, password > 10
2021-07-22 16:26:02.060182, password < 6
2021-07-22 16:26:07.114983, password > 10
2021-07-22 16:26:11.971780, password > 10
2021-07-22 16:26:12.941778, password < 6
2021-07-22 16:26:13.789452, password < 6
2021-07-22 16:26:14.744570, password < 6
2021-07-22 16:26:15.676765, password < 6
2021-07-22 16:26:33.763707, password < 6
2021-07-22 16:26:35.048542, password < 6
2021-07-22 16:26:36.318447, password < 6
2021-07-22 16:26:38.991601, password < 6
2021-07-22 16:26:43.001912, password > 10
2021-07-22 16:26:46.593327, password > 10
There are 0 passwords that are too long.
There are 0 passwords that are too short.
笔记:
文件 ITWorks_password_log.txt 中有三十行。我需要:
- 打印每一行,
- 使用 if 语句打印一条语句,分别显示短密码和长密码的数量。
我使用以下方法生成了成功的代码:
for line in words:
words = f.read()
print(bad_words)
但是我的讲师只想要简单的旧 if loops 来遍历列表并找到 bad_words。
我显然在这里遗漏了一些显而易见的东西。但是我已经尝试了所有我能想到的代码迭代,以使这个血腥的 if 循环工作。有人可以帮忙吗?
回答1
每次迭代时,您都将 bad_word 设置为 [line]。所以它会是这样的:
line 1: bad_word = [2021-07-22 16:24:42.843103, password < 6]
line 2: bad_word = [2021-07-22 16:24:44.963020, password < 6]
line 3: bad_word = [2021-07-22 16:24:49.327202, password > 10]
...
您不是将每一行都添加到数组中,而是在创建一个带有单行的数组,以节省您已经完成的工作。
您需要附加到一个名为 bad_words 的空数组,以便最后一个 for 循环可以检查太短或太长的密码
回答2
在循环之外声明 bad_words
,在 python 中它可以工作,但通常这是不好的做法。
这声明了一个包含单个元素的数组,这不是您想要的:
bad_words = [line]
您想将每一行添加到数组中,请执行以下操作:
bad_words = []
for line in temp_file:
bad_words.append(line)
print(line)
您还应该关闭打开的文件 https://askubuntu.com/questions/701491/is-closing-a-file-after-having-opened-it-with-open-required-in-python