這是一個(作業)問題,我一直在努力幾個小時。它是一切正常,直到我被要求打印在下面的代碼指定的詞典的內容:使用for-loop打印字典時出現TypeError
# Practicing the use of dict in python by writing a simple Finnish-Spanish
# dictionary and a few operations that can be performed on said dictionary.
# The keys in the dictionary are in Finnish.
def print_dictionary(suomi_espanja):
"""
A function that prints a sorted (by key) dictionary. We are supposed to
use the sorted()-function in sorting the keys.
:param suomi_espanja: The dictionary to be printed
:return:
"""
jarjestetty_sanakirja = sorted(suomi_espanja)
for sana in jarjestetty_sanakirja:
print("{:s} {:s}".format(sana, jarjestetty_sanakirja[sana]))
def alternate_print_dictionary(suomi_espanja):
"""
A function that prints a sorted (by key) dictionary. We are supposed to
use the sorted()-function in sorting the keys. This alternate version is
for testing whether the range()-function works for us in this case
(turns out it doesn't, no surprise there since this is a dict, not a list).
:param suomi_espanja: The dictionary to be printed
:return:
"""
jarjestetty_sanakirja = sorted(suomi_espanja)
for i in range(len(jarjestetty_sanakirja)):
print("{:d} {:s}".format(i, jarjestetty_sanakirja[i]))
def translate_word(suomi_espanja):
"""
A function that translates a single word into Spanish
:param suomi_espanja:
:return:
"""
sana = input("Syötä käännettävä sana: ")
if sana in suomi_espanja:
print(sana, "espanjaksi on", suomi_espanja[sana])
else:
print("Sanaa", sana, "ei löydy sanakirjasta.")
def add_word(suomi_espanja):
"""
A function that adds words to the dictionary.
:param suomi_espanja: The dictionary specified in main()
:return: -
"""
sana = input("Syötä lisättävä sana suomeksi: ")
kaannos = input("Syötä lisättävä sana espanjaksi: ")
suomi_espanja[sana] = kaannos
def remove_word(suomi_espanja):
"""
A function that removes a word from the dictionary
:param suomi_espanja: The dictionary in question
:return: -
"""
sana = input("Syötä poistettava sana suomeksi: ")
if sana not in suomi_espanja:
print("Sanaa {:s} ei löydy sanakirjasta".format(sana))
else:
del suomi_espanja[sana]
def translate_sentence(suomi_espanja):
"""
A function that translates an entire sentence (badly) based on the words
found in the dictionary
:param suomi_espanja: The dictionary
:return: -
"""
# Under construction
sana = input("Syötä käännettävä teksti suomeksi: ")
print("Teksti sanakirjan varassa käännettynä:")
print("Sanaa", sana, "ei löydy sanakirjasta.")
def main_menu(suomi_espanja):
"""
A function containing the main menu for our dictionary program
:param suomi_espanja: Our dictioanry
:return: -
"""
# A menu for handling the dictionary
while True:
# Choosing what to do
komento = input("[S]ana/[L]isää/[P]oista/[T]ulosta/[K]äännä/[Q]uit: ")
komento = komento.upper()
# Translating a single word already in the dictionary
if komento == "S":
translate_word(suomi_espanja)
# Adding new words to the dictionary
elif komento == "L":
add_word(suomi_espanja)
# Removing words from the dictionary
elif komento == "P":
remove_word(suomi_espanja)
# Printing the dictionary sorted alphabetically based on the (Finnish)
# keys
elif komento == "T":
print_dictionary(suomi_espanja)
# Translating an entire sentence based on the words in the
# dictionary (under construction)
elif komento == "K":
translate_sentence(suomi_espanja)
# Quitting the program
elif komento == "Q":
print("Adios!")
return
# Erroneous input by the user
else:
print("Virheellinen komento, syötä joko S, L, P, T, K tai Q!")
def main():
# Our dictionary
suomi_espanja = {"moi": "hola", "kiitos": "gracias", "ranta": "playa"}
# A menu for handling the dictionary
main_menu(suomi_espanja)
main()
當我運行此代碼,然後按「T」來打印按字母順序排列的按鍵和相應的值,我得到以下錯誤:
"C:\Program Files (x86)\Python35-32\python.exe" D:/.../5.1.1(sanakirja_turistille).py
[S]ana/[L]isää/[P]oista/[T]ulosta/[K]äännä/[Q]uit: t
Traceback (most recent call last):
File "D:/.../5.1.1(sanakirja_turistille).py", line 134, in <module>
main()
File "D:/.../5.1.1(sanakirja_turistille).py", line 131, in main
main_menu(suomi_espanja)
File "D:/.../5.1.1(sanakirja_turistille).py", line 113, in main_menu
print_dictionary(suomi_espanja)
File "D:/.../5.1.1(sanakirja_turistille).py", line 16, in print_dictionary
print("{:s} {:s}".format(sana, jarjestetty_sanakirja[sana]))
TypeError: list indices must be integers or slices, not str
綜觀給我們(下)課程講義一個例子,最後的印刷指令應該工作,但它給了我一個TypeError
。我已經在print_dictionary()
函數中寫入了for循環和print命令,就像它們在示例中一樣,所以我不知道我在做什麼錯誤。
>>> for nimi in puhelinluettelo:
... print(nimi)
...
Kemisti Kalle
Fyysikko Tiina
Teekkari Teemu
Rakentaja Niina
>>> for nimi in puhelinluettelo:
... print("{:16s} {:12s}".format(nimi, puhelinluettelo[nimi]))
...
Kemisti Kalle 041-56789
Fyysikko Tiina 045-234567
Teekkari Teemu 050-12345
Rakentaja Niina 0400-123
我的意思是,這顯然是在抱怨字符串,但爲什麼上面的示例代碼工作?
這是它的字典返回一個列表。謝謝。 – TheSodesa