我正在做一个Python练习,我必须编写一个程序,根据以下标准随机生成密码:
它必须由两个随机选择的单词组成,这些单词取自一个巨大的文本文件,每行一个单词。
每个单词必须至少有 3 个字母,密码总共必须为 8、9 或 10 个字母。
单词连接在一起(没有空格),每个单词的第一个字母大写。
我的代码如下:
# Randomly generate a two-word password from a text file of words, subject to various conditions
from sys import exit
from random import choice
print()
try:
inf=open("words.txt","r")
except FileNotFoundError:
print("Error: words.txt not found.")
print("Quitting...")
exit()
words=inf.readlines()
for word in words:
word=word.rstrip()
word=word.lower()
first=choice(words)
words.remove(first)
second=choice(words)
while len(first)<=2 or len(second)<=2 or len(first)+len(second) not in [8,9,10]:
first=choice(words)
words.remove(first)
second=choice(words)
first=first[0].upper()+first[1:]
second=second[0].upper()+second[1:]
password=first+second
print(password)
在尝试此练习时,我观察到密码中的每个单词末尾似乎都有一个额外的空格,这是“行尾”字符
\n
。但是,我已经包含了 word=word.rstrip()
行,并了解到这应该删除所有空格、制表符和行尾字符。然而变量 first
和 second
仍然有 '
' 最后,即使它们是从列表words
中随机选择的,并应用了 .rstrip() 。这里发生了什么?我确信我错过了一些东西。非常感谢任何建议:)
words=inf.readlines()
for word in words:
word=word.rstrip()
word=word.lower()
问题是您正在修改变量
word
,而不是我上面引用的循环中的列表words
我认为一个简单的解决方案是进行列表理解
words = [word.rstrip().lower() for word in words]
这样你的新列表将被删除,没有任何空格