【问题标题】:Checking User Input Against List Python 3.x根据列表 Python 3.x 检查用户输入
【发布时间】:2016-02-05 17:00:38
【问题描述】:

我必须从文本文件中取出数字,将它们放入一个列表中,然后向用户询问一个数字并告诉他们它是否在列表中。

这就是我所拥有的:

#read numbers to list
infile = open('charge_accounts.txt','r')
lines = infile.read().strip()
list1 = [lines]
infile.close()

#ask user for #
inp = str(input('Enter an account number: '))

#determine if input is in list
#display invalid/valid
if inp in list1:
    print('valid number')
else:
    while inp not in list1:
        print('invalid entry')
        inp = input('try another number: ')
        if inp in list1:
            print('valid number')
             break

问题是它认为所有输入都是无效的。我想我要么搞砸了将文件转换为列表,要么搞砸了 while 循环,但我不知道要修复什么。

【问题讨论】:

  • 您没有包含数字的列表。你有一个只有一个元素的列表,一个包含文件中所有文本的字符串。数字是如何存储在文件中的?每行一个数字?
  • 是的,每个数字都在一行上。如何将每个数字放在单独的字符串中?

标签: list file validation python-3.x input


【解决方案1】:

您有一个列表,其中只有一个字符串,即整个文件的内容。

如果您的数字都在单独的行上,您需要使用迭代读取文件(给您单独的行)并分别剥离每一行。最好使用list comprehension

with open('charge_accounts.txt') as infile:
    numbers = [num.strip() for num in infile]

请注意,我使用with 语句打开文件,这样可以确保在块完成后再次自动关闭文件。

您可能想研究关于如何编写循环来询问数字的规范 Asking the user for input until they give a valid response 问题。根据您的情况调整该帖子,并假设您仍希望将输入处理为字符串而不是整数:

with open('charge_accounts.txt') as infile:
    numbers = [num.strip() for num in infile]

while True:
    account_number = input('Enter an account number: ')
    if account_number not in numbers:
        print('Invalid entry, please try again')
    else:
        break

【讨论】:

  • 需要定义num吗?我正在上入门课程,但我还没有学习过,所以我将保持原样。
  • @BenSchutt:不,for 循环会为您将文件对象中的每一行分配给该变量。
  • @BenSchutt:我已为您链接到 Python 3 教程的相应部分,其中解释了列表推导。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
相关资源
最近更新 更多