我一直在创建一个用python学习日语的学习程序,并尝试使用凝聚和随机化但是它没有做输入,我已经多次分析它并且无法找到任何理由这里是我迄今为止所拥有的,任何建议将不胜感激
import sys
import random
start = input("Are you ready to practice Japanese Lesson 1? ")
if start.lower() =="yes":
print("Ok Let's Begin")
questiontimer = 0
while questiontimer<10:
questiontimer = (int(questiontimer) + 1)
WordList = ["konnichiwa"]
rand_word = random.choice(WordList)
if rand_word == "konnichiwa":
answer = input("Question "+ questiontimer +":Say hello In japanese.")
if rand_word == answer.lower():
print("Correct!")
elif randword!= answer.lower():
print("Incorrect, the answer is Konnichiwa")
这很简洁,因为我可以在
之后重现问题print("Ok Let's Begin")
它应该从列表中选择一个随机字符串然后根据它现在请求输入它现在它在列表中只有一个字符串但仍然不打印输入中的内容或允许输入答案
答案 0 :(得分:0)
while True:
questiontimer = "0"
questiontimer = (int(questiontimer) + 1)
WordList = ["konnichiwa"]
程序停留在这些步骤,无限重复此代码块。也许您可以使用int(questiontimer) < 10
作为条件,如下所示。
questiontimer = 0
while questiontimer < 10:
questiontimer = questiontimer + 1
WordList = ["konnichiwa"]
此程序中可能还有其他不需要的功能,但上面的答案解决了为什么程序在仅打印一行后卡住的原因。因此,这是你的问题的答案。但是,您想要的可能与下面的代码类似。
import sys
import random
start = input("Are you ready to practice Japanese Lesson 1?")
if start.lower() == "yes":
print("Ok, Let's Begin")
else:
print("Bye bye")
exit(0)
WordList = ["konnichiwa", "foo", "bar"]
rand_word_index = random.randint(0, len(WordList)-1)
rand_word = WordList[rand_word_index]
print("Question "+ str(rand_word_index) +": ")
if rand_word == WordList[0]:
answer = input(":Say hello In japanese.")
if rand_word == answer.lower():
print("Correct!")
else:
print("Incorrect, the answer is Konnichiwa")
elif rand_word == WordList[1]:
answer = input("Say foo In japanese.")
if rand_word == answer.lower():
print("Correct!")
else:
print("Incorrect, the answer is foo")
elif rand_word == WordList[2]:
answer = input("Say bar In japanese.")
if rand_word == answer.lower():
print("Correct!")
else:
print("Incorrect, the answer is bar")
希望这有帮助。
答案 1 :(得分:0)
另一个答案的一些细微改进,以浓缩一些代码和所希望的行为(我认为)你实际上试图使用你的原始单词列表,因为在这里只使用一个单词将是多余的。
你抓了一个随机的单词,dict的顺序是无序的,除非你当然使用有序的dict。因此,在这里迭代dict的项目或多或少是问题的随机排列。
不确定你真正想要用questiontimer
实现什么,所以我只是在这里放弃了一个简单的q和风格程序。
编辑:为&#34; fancy&#34;添加解释代码部分
当我们在enumerate内包装一个iterable时,它只返回一个元组,其中包含我们在迭代中的当前数字 - 它从零开始,python中的所有内容都是零。 Forloops,索引,你命名它 - 如果你刚刚使用了一个简单的for循环,那么iterable最初会返回什么。
因此,正如您在文档中看到的那样enumerate
只会在iterable中返回count / item的这个元组。因此,当我们执行enumerate(qa.items())
时,我们有一个包含计数的元组和通过迭代qa.items()
返回的键/值对(也是一个元组)。因此,我们使用for i, (k, v) ...
来迭代这些项目。 i
是这里的计数,它是枚举返回的元组中的第一项,(k, v)
是包含字典中键/值对的元组。注意:我们必须i, (k, v)
而不是i, k, v
。这将尝试从enumerate
返回的内容中解压缩3个单独的项目,而不仅仅是它包含的两个项目,因为它实际上是一个2元组。 (包含两个元素的元组)
事实上,如果我们尝试使用i, k, v
,它会因此而抛出以下错误:
....
for i, k, v in enumerate(qa.items()):
ValueError: need more than 2 values to unpack
%s
和%d
只是字符串格式化程序。您可以使用它们将不同类型的数据结构格式化为字符串。 %s
用于将字符串放入其他字符串中。 %d
用于将整数放入字符串中。 %f
用于放置浮子......等等。
#initial two vars for keeping a tally of incorrect and correct answers by the user.
correct = 0
incorrect = 0
#Just a dict to hold the phrase and the english equivalent in a key / value pair
qa = {"konnichiwa": 'hello',
"ohayo gozaimasu": "good-morning",
"oyasuminasai": "goodnight",
"sayonara": "goodbye",
"dewa mata": "see you" ,
"dewa mata ashita": "see you tomorrow",
"dewa mata raishu": "see you next week",
}
start = input("Are you ready to practice Japanese Lesson 1?")
if start.lower() == "yes":
for i, (k,v) in enumerate(qa.items()):
answer = input("Question %d: Say %s in Japanese.\n" % (i, v))
if answer != k:
incorrect += 1
print("Incorrect the answer is: %s" % k)
else:
correct += 1
print("Correct.")
print("Num correct: %d\nNum incorrect: %d" % (correct, incorrect))
else:
print("Maybe next time.")
答案 2 :(得分:0)
就个人而言,我会将你的问题和答案存储在一些元组列表中
qa_list = [("What is hello in Japanese?", "konnichiwa")]
然后,你可以遍历那些
for i, qa in enumerate(qa_list,start=1):
my_ans = input("Question {}: {}".format(i, qa[0]))
if my_ans == qa[1]:
print("correct")