2015-11-05 48 views
0

我必须从一个文本文件中提取数字,将它们放在一个列表中,并要求用户输入一个数字并告诉他们它是否在列表中。根据列表Python 3.x检查用户输入

这是我有:

#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循环,但我不知道要修复什么。

+0

您没有包含数字的列表。你只有一个元素的列表,一个字符串保存文件中的所有文本。数字如何存储在文件中?每行一个号码? –

+0

是每个数字都在一行上。我如何将每个数字放在一个单独的字符串中? –

回答

0

你有一个只有一个字符串的列表,整个文件的内容。

如果您的数字分别位于不同的行上,则需要使用迭代(给出单独的行)读取文件,并分别剥离每行。这是最好用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 
+0

是否需要定义num? 我在介绍课程,我没有学过,所以我会离开,因为它是。 –

+0

@BenSchutt:不,“for”循环负责将文件对象的每一行分配给你的变量。 –

+0

@BenSchutt:我已经链接到适合你的Python 3教程的部分,其中列出了解释。 –