Python 中的行尾字符和 .rstrip() 问题

问题描述 投票:0回答:1

我正在做一个Python练习,我必须编写一个程序,根据以下标准随机生成密码:

  1. 它必须由两个随机选择的单词组成,这些单词取自一个巨大的文本文件,每行一个单词。

  2. 每个单词必须至少有 3 个字母,密码总共必须为 8、9 或 10 个字母。

  3. 单词连接在一起(没有空格),每个单词的第一个字母大写。

我的代码如下:

# 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() 。这里发生了什么?我确信我错过了一些东西。非常感谢任何建议:)

python string file strip
1个回答
0
投票
words=inf.readlines()
for word in words:
    word=word.rstrip()
    word=word.lower()

问题是您正在修改变量

word
,而不是我上面引用的循环中的列表
words
我认为一个简单的解决方案是进行列表理解
words = [word.rstrip().lower() for word in words]
这样你的新列表将被删除,没有任何空格

© www.soinside.com 2019 - 2024. All rights reserved.