繁体   English   中英

Python 3.X-使用用户输入搜索列表并打印结果

[英]Python 3.X - Search a list using user input and print the result

with open("zipcodes.txt", "r") as ins:
   array = []
   for line in ins:
       array.append(line.split(","))

print(array)

userInput = input("Please enter the codes your looking for: ")

print(array.index(userInput))

首先,这是用于学校作业,所以我不是在寻找完整的答案,而是在寻找方向。 我的任务是将文本文件加载到列表中,每行分开。 (文本文件是每个美国邮政编码,邮政编码所在的城市以及州号EX。93312,BAKERSFIELD,CA)。 创建列表后,程序需要做的下一步就是获取用户邮政编码,然后打印出邮政编码,城市和州。 这是我到目前为止的代码,我完全不知所措。 同样,我不是在寻找一个完整的答案,而只是一个方向。 有时,我会错过一些简单的解决方案,而只需要有人说点什么,使它在我的脑海中震撼。 感谢您的时间以及任何信息或帮助。

array.index()不返回元素本身; 它返回它所在的索引。 例如,如果“ 93267”是列表中的第二个元素,而您调用了array.index('93267'),则会得到“ 1”。 尝试创建一个保存索引的变量,然后打印索引处的内容:

index1 = array.index(userInput)
print(array[index1))

但是,您可能会遇到此问题,因为在代码中以逗号分隔每行,而在说明中,邮政编码,城市和州由逗号分隔。 我不确定您的原始文本文件是什么样子,所以我可能会错,但是请注意,这可能会导致一些问题。

希望这有所帮助; 如果您遇到更多问题,请随意说。 祝您的学校项目好运!

编辑:此版本不使用字典,而是使用列表。

此代码是您可以执行此操作的一种快速示例。 文件zipcodes.txt仅具有您在描述中给出的单个示例。

MATCH = """
Zipcode: {}
City:    {}
State:   {}
"""

with open('zipcodes.txt', 'r') as f:
    zipcodes = [line.rstrip().split(',') for line in f]

while True:
    user_zipcode = input("Enter zipcode (or (Q)uit): ")
    if user_zipcode.lower() == 'q':
        break
    for zipcode, city, state in zipcodes:
        if user_zipcode == zipcode:
            print(MATCH.format(zipcode, city, state))
            break
    else:
        print("\nNo match for zipcode: '{}'\n".format(user_zipcode))

安慰:

Enter zipcode (or (Q)uit): 12345

No match for zipcode: '12345'

Enter zipcode (or (Q)uit): 93312

Zipcode: 93312
City:    BAKERSFIELD
State:   CA

Enter zipcode (or (Q)uit): q

如果我正确理解, array的结构将最终如下所示:

[['ZIPCODE','CITY','STATE'],['ZIPCODE','CITY','STATE'],...]

并且userInput将保存一个表示ZIPCODE的字符串。

鉴于该结构array ,对于每个条目array的条目(每个子表),第一元件(条目[0])将是一个ZIPCODE。

您可以遍历array每个条目,并检查该条目的第一个元素是否与userInput相匹配。

如果是这样,您可以打印该条目。

注意:要了解为什么从print语句中出错,请检查对list方法 (即index方法)的描述。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM