从文本字典访问值

时间:2019-03-23 00:17:22

标签: python

我正在尝试创建“这是您的新名称生成器”程序。我这样做是通过询问用户的名字和姓氏。然后,该程序将使用其名字的首字母和其姓氏的最后字母,并从两个文本文件中提取出新的名字和姓氏。

我已经获得用户的名字和姓氏,并从文件中提取信息,但是它总是为我提供文件的最后一行。

我以为我可以像字典一样设置文件,然后将用户的输入用作键,但这似乎不起作用。

有什么建议吗?

firstName = input("What is your first Name? ")
lastName = input("What is your last Name? ")

fN = firstName[0].lower()
lN_len = len(lastName) -1
lN = lastName[lN_len]

fNdict = {} 
with open('firstName.txt') as f:
    for line in f:
        (fN, fNval) = line.split(",")
        fNdict[fN] = fNval

lNdict = {}
with open('lastName.txt') as fileobj:
    for line in fileobj:
        lNkey, lNvalue = line.split(",")
        lNdict[lN] = lNvalue
newFirstName = fNval
newLastName = lNvalue

print("Your zombie Name is: %s %s "%(newFirstName,newLastName))

参考图片:

2 个答案:

答案 0 :(得分:0)

运行这些行时:

newFirstName = fNval
newLastName = lNvalue

fNvallNvalue具有各自循环中的最后一个值。我认为您的意思是使用用户的名字和姓氏作为字典的键,例如

newFirstName = fNdict[fN]
newLastName = lNdict[lN]

请注意,如果fNlN不在字典中,则此操作将失败。您可能要改为创建defaultdicts

还请注意,Python具有大多数Python开发人员都遵循的official style guide。请考虑阅读并相应编写代码。您共享的代码很难阅读。

答案 1 :(得分:0)

您可以遵循略有不同的实现方式来获得相同的结果。

  1. 创建两个具有所有关联字母-名字和字母-姓氏的python字典。
  2. 使用json将它们写到文件中。该文件将替代您的firstName.txt和lastName.txt

此操作只能创建一次具有名称的文件。

然后您的名称生成器是一个脚本,该脚本:

  1. 加载这两个字典。
  2. 询问用户输入以获得键。
  3. 使用用户输入从字典中检索名称。

前两点是通过以下方式实现的:

import json

#these are just brief examples, provide complete dictionaries.
firstnames = {"A": "Crafty", "B": "Brainy"}
lastnames = {"A": "Decapitator", "B": "McBrains"}

with open("fullnames.txt", "w") as ff:
    json.dump(firstnames, ff)
    ff.write('\n')
    json.dump(lastnames, ff)

这将是一个使用名称生成文件的脚本。

名称生成器将是:

import json

with open("fullnames.txt", "r") as ff:
    ll = ff.readlines()
    firstnames = json.loads(ll[0].strip())
    lastnames = json.loads(ll[1].strip())

inputfirst = input("What is your first Name? ")
inputlast = input("What is your last Name? ")

fn = inputfirst[0].upper()
ln = inputlast[-1].upper() #negative indexes start from the last element of the iterable, so -1 would be the last.

print("Your zombie Name is: {} {} ".format(firstnames[fn], lastnames[ln])) #using string format method, better that the old %