我的程序按照.txt文件的顺序打印值,我不希望这种情况发生

时间:2015-11-02 04:06:06

标签: python python-3.x subprocess ipython

我想提示用户从文本文件(键)输入特定数据,这样我的字典就可以为每个数据提供值。

它的工作原理如下:

fin=open('\\python34\\lib\\toys.txt')
toys = {}

for word in fin:
    x=fin.readline()
    x = word.replace("\n",",").split(",")
    a = x[0]
    b=x[1]
    toys[a]=str(b)
    i = input("Please enter the code:")
    if i in toys:
        print(i," is the code for a= ", toys[i],)
    else:
        print('Try again')
    if i == 'quit':
        break

但如果我从列表中输入一个随机密钥,它会打印'再试一次'。 (以下是:

D1,Tyrannasaurous

D2,Apatasauros

D3,迅猛

D4,Tricerotops

D5,翼龙

T1,柴电

T2,蒸汽机

T3,Box Car

T4,油罐车

T5,守车

B1,棒球

B2,篮球

B3,足球

B4,垒球

B5,网球

B6,Vollyeball

B7,Rugby Ball

B8,板球

B9,药球

但如果我这样做是为了它的工作原理。如何修复此程序,以便我可以随时输入任何键,它仍会打印相应的值?

2 个答案:

答案 0 :(得分:2)

在提示搜索字词之前,您需要读取整个文件。因此,您需要两个循环 - 一个用于获取整个数据,另一个循环用于搜索数据。

以下是您更新的代码的外观。我用数组替换了文件输入,以便我可以使用Web工具运行它:

fin=['D1,Tyrannasaurous','D2,Apatasauros','D3,Velociraptor' ]
toys = {}

for word in fin:
    x = word.replace("\n",",").split(",")
    a = x[0]
    b=x[1]
    toys[a]=str(b)

while 1:
    i = input("\nPlease enter the code:")
    if i in toys:
        print(i," is the code for a= ", toys[i],)
    else:
        print('\nTry again')
    if i == 'quit':
        break

此处输出:https://repl.it/BVxh

答案 1 :(得分:0)

将文件读入字典:

with open('toys.txt') as file:
    toys = dict(line.strip().split(',') for line in file)

要以交互方式从命令行打印与用户提供的输入键对应的值,直到收到quit键为止:

for code in iter(lambda: input("Please enter the code:"), 'quit'):
    if code in toys:
        print(code, "is the code for toy:", toys[code])
    else:
        print(code, 'is not found. Try again')

它使用two-argument iter(func, sentinel)