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!")

これは、ディクショナリの最後の Ununocium を除くすべての要素で機能します。ユーザーが 118 を入力すると、この要素が表示されますが、「ununoctium」と入力すると、プログラムは「それは要素ではありません!」と表示します。これはなぜですか、どうすれば修正できますか?

前もって感謝します

4

2 に答える 2

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 に答える
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 に答える