0

所以我有一本由数字组成的字典,它的定义是元素周期表上的相应元素。

我已经建立了这样的字典:

for line in open("periodic_table.txt"):
    temp.append(line.rstrip())

for t in temp:
    if t[1] != " ":
        elements[x] = t[3:]
    else:
        elements[x] = t[2:]
    x += 1

我知道每个元素都在表格中,因为我要求程序打印字典。关键是用户输入一个数字或元素名称,数字和名称都打印如下:

while count == 0:
    check = 0
    line = input("Enter element number or element name: ")
    if line == "":
        count = count + 1
        break
    for key,value in elements.items():
        if line == value:
            print ("Element number for",line,"is",key)
            check = 1
            break
        if line.isdigit():
            if int(line) <= 118 and int(line) > 0:
                print ("Element number",line, "is",elements[int(line)])
                check = 1
                break
    if check == 0:
        print ("That's not an element!")

这适用于字典中除最后一个元素 Ununoctium 之外的每个元素。当用户输入 118 时,会打印此元素,但如果他们输入“ununoctium”,则程序会显示“这不是元素!”。为什么会这样,我该如何解决?

提前致谢

4

2 回答 2

2

让 python 为您进行查找要容易得多。现在忽略空行:

elements = []
for line in open("periodic_table.txt"):
    elements.append(line[3:])

然后,您可以像这样进行查找:

if answer.isdigit():
    print elements[int(answer)]
else:
    print elements.index(answer)
于 2013-08-29T10:09:35.237 回答
2

我怀疑这是一个区分大小写的问题。
改变

if line == value:

if line.lower() == value.lower():

会解决这个问题。
当你在那里的时候,为什么有if内部for循环?你可以先检查一下,然后不需要break

if line.isdigit():
    if int(line) <= 118 and int(line) > 0:
        print ("Element number",line, "is",elements[int(line)])
        check = 1 
        #<-------- break no longer required
else:
    #for loop as above
于 2013-08-29T10:11:25.063 回答