【发布时间】:2019-09-30 08:39:15
【问题描述】:
我自己编写的程序有问题,该程序检查您的词汇知识。您可以创建一个包含任意数量词汇的会话,您可以编写这些单词及其答案,如果您已完成编写此词汇,程序可以询问您这些单词,您应该用另一种语言编写解决方案。单词保存在 2 个列表中(第一个列表用于第一种语言,另一个列表用于另一种语言中每个单词的解决方案)。一切正常,但如果你关闭程序,你的话将不会被保存。我想将这些列表保存在 .txt 文件中。创建一个 .txt 文件是可行的,但我不能在 .txt 文件中插入一个列表,它说这应该是一个字符串。我尝试了很多方法,但仍然遇到一些错误。而且我希望将两个列表放在一个文件中,当我阅读它们时,它们应该以某种方式分开。 我希望有一个人可以帮助我。非常感谢!!!
我尝试了基本的 file.write 和 file.read 方法,但我得到了一些错误,说它不能是一个列表,它必须是一个字符串。 我也试过 join() 方法,不工作。 而且我不能使用pickle,因为我在一个文件中有两个列表,它们必须分开。
import random
import os.path
firstList = []
secondList = []
sprachen = ["Afrikaans", "Albanisch", "Amharisch", "Arabisch", "Armenisch", "Aserbaidschanisch", "Baskisch", "Bengalisch", "Birmanisch", "Bosnisch", "Bulgarisch", "Cebuano", "Chichewa", "Chinesisch", "Mandarin", "Dänisch", "Deutsch", "Englisch", "Esperanto", "Estnisch", "Filipino", "Finnisch", "Französisch", "Friesisch", "Galizisch", "Georgisch", "Griechisch", "Gujarati", "Haitianisch", "Hausa", "Hawaiisch", "Hebräisch", "Hindi", "Hmong", "Igbo", "Indonesisch", "Irisch", "Isländisch", "Italienisch", "Japanisch", "Javanisch", "Jiddisch", "Kannada", "Kasachisch", "Katalanisch", "Khmer", "Kirigisch", "Koreanisch", "Korsisch", "Kroatisch", "Kurdisch", "Kurmandschi", "Lao", "Lateinisch", "Latein", "Lettisch", "Litauisch", "Luxemburgisch", "Malagasy", "Malayalam", "Malaysisch", "Maltesisch", "Maori", "Marathi", "Mazedonisch", "Mongolisch", "Nepalesisch", "Niederländisch", "Norwegisch", "Paschtu", "Persisch", "Polnisch", "Portugiesisch", "Punjabi", "Rumänisch", "Russisch", "Samonaisch", "Schottisch-Gällisch", "Schwedisch", "Serbisch", "Sesotho", "Shona", "Sindhi", "Singhalesisch", "Slowakisch", "Slowenisch", "Somali", "Spanisch", "Suaheli", "Sundanesisch", "Tadschikisch", "Tamil", "Telugu", "Thailändisch", "Tschechisch", "Türkisch", "Ukrainisch", "Ungarisch", "Urdu", "Usbekisch", "Vietnamesisch", "Walisisch", "Weissrussisch", "Xhosa", "Yoruba", "Zulu"]
print("Willkommen beim Vokabelprogramm. Viel Spass beim Lernen!")
def start():
global name
projekt = input("Möchten Sie eine bestehende Lerneinheit öffnen [Open]
oder eine neue Lerneinheit beginnen [New]? ")
if projekt == "Open":
openProject = input("Welche Lerneinheit möchten Sie öffnen? ")
while os.path.exists(openProject + ".txt"):
name = openProject
output()
else:
erstellen = input("Diese Lerneinheit existiert unter diesem Namen noch nicht. Möchten Sie diese erstellen? ")
if erstellen == "Ja":
name = openProject
file = open(name + ".txt", "w+")
file.close()
print("Die Lerneinheit, namens " + name + ", wurde erstellt.")
sprache()
else:
print("Die Aktion wird abgebrochen.")
start()
elif projekt == "New":
name = input("Wie möchten Sie diese Lerneinheit nennen? ")
while name == "":
print("Geben Sie für den Namen Ihrer Lerneinheit einen gültigen Wert ein.")
else:
while os.path.exists(name + ".txt"):
bestaetigung = input("Dieser Dateiname existiert bereits, möchten Sie diese Datei überschreiben? ")
if bestaetigung == "Ja":
file = open(name + ".txt", "w+")
file.close()
print("Die Lerneinheit, namens " + name + ", wurde erstellt.")
sprache()
else:
print("Die Aktion wird abgebrochen.")
start()
else:
file = open(name + ".txt", "w+")
file.close()
print("Die Lerneinheit, namens " + name + ", wurde erstellt.")
sprache()
else:
print("Diese Eingabe ist ungültig.")
start()
def sprache():
global ersteSprache
global zweiteSprache
ersteSprache = input("Welche ist die erste Sprache, in der Sie die Vokabeln prüfen möchten? ")
while ersteSprache in sprachen:
zweiteSprache = input("Und die zweite Sprache? ")
while zweiteSprache in sprachen:
while zweiteSprache == ersteSprache:
print("Sie müssen 2 verschiedene Sprachen angeben!")
zweiteSprache = input("Welche ist die zweite Sprache? ")
while zweiteSprache in sprachen:
beginning()
else:
print("Diese Sprache gibt es nicht! Versuchen Sie die Sprachen nochmals einzugeben.")
sprache()
else:
beginning()
else:
print("Diese Sprache gibt es nicht, bitte versuchen Sie es nochmals.")
else:
print("Diese Sprache gibt es nicht, bitte versuchen Sie es nochmals.")
sprache()
def beginning():
vokabel = input("Geben Sie eine Vokabel auf " + ersteSprache + " ein: ")
if vokabel == "":
print("Bitte geben Sie für die Vokabel einen gültigen Wert ein.")
beginning()
firstList.append(vokabel)
uebersetzung = input("Was bedeutet diese Vokabel auf " + zweiteSprache + "? ")
if uebersetzung == "":
print("Bitte geben Sie für die Übersetzung einen gültigen Wert ein.")
uebersetzung = input("Was bedeutet diese Vokabel auf " + zweiteSprache + "? ")
secondList.append(uebersetzung)
def abfrage():
fertig = input("Ist das alles? Geben Sie Ja ein um die Vokabelliste zu bestätigen oder drücken Sie die Enter-Taste um noch eine Vokabel hinzuzufügen: ")
if fertig == "Ja":
with open(name + ".txt", "w") as file:
for combo in zip(firstList, secondList):
file.writelines(" ".join(combo) + "\n")
output()
elif fertig == "":
beginning()
else:
print("Diese Eingabe ist ungültig, bitte versuchen Sie es nochmals")
abfrage()
abfrage()
def output():
newLanguage_1 = []
newLanguage_2 = []
with open(name + ".txt", "r") as file:
for line in file.readlines():
word_1, word_2 = line.split()
newLanguage_1.append(word_1)
newLanguage_2.append(word_2)
ausgabe = random.choice(newLanguage_1)
print(ausgabe)
zahl = newLanguage_1.index(ausgabe)
pruefen = input("Übersetzung: ")
vokabelZweiteSprache = newLanguage_2[zahl]
def nochmal():
nochmals = input("Möchten Sie noch eine Vokabel prüfen (ENTER-Taste)? ")
if nochmals == "":
output()
else:
print("Viel Glück bei der Prüfung, Daumen sind gedrückt!")
exit()
if pruefen != vokabelZweiteSprache:
print("Leider falsch! Die richtige Lösung wäre " + vokabelZweiteSprache + " gewesen. Lernen Sie diese Vokabel nochmals!")
nochmal()
else:
print("Richtig! " + ausgabe + " heisst " + vokabelZweiteSprache + ".")
nochmal()
start()
@Kraay89
这里我贴一下我的相关代码出现以下错误:IndexError: list index out of range[编辑]我检查了列表是否为空,但不知道为什么,我在代码中赋值,问题出在哪里:
new_currLanguage = []
with open(name + ".txt", "r") as file:
lines = file.readlines()
for lines[0] in file.readlines():
lang_1, lang_2 = lines[0].split()
new_currLanguage.append(lang_1, lang_2)
firstLanguage = new_currLanguage[0]
secondLanguage = new_currLanguage[1]
【问题讨论】:
-
请分享您的代码...以及您遇到的错误
-
"单词被保存在 2 个列表中(第一个语言的列表和其他语言中每个单词的解决方案的另一个列表)" => 错误的设计。你想要一个
(original_word, translated_word)的列表。否则,如果出于某种原因,两个列表中的任何一个发生了更改,而另一个列表中没有报告更改,那么您的数据已损坏。 -
我可以发,但我知道这行不通,因为我尝试了很多东西。
-
“不工作”是对问题最没有用的描述。请阅读minimal reproducible example 并相应地编辑您的问题;-)
-
“医生您好,我怎么了?” - “嗯,我可以先检查你,然后再直接诊断吗?” - “好吧,如果你必须这样做,但我已经吃了一些药,但它们没有用......”:P
标签: python python-3.x list pickle