所以我有一个由数字组成的字典,它的定义是元素周期表中的对应元素。
我已经建立了这样的字典:
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”,则程序会显示“这不是元素!”。为什么这样,我该如何解决?
提前致谢
答案 0 :(得分: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)
答案 1 :(得分: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