Повторяйте функцию каждые 5 раз - PullRequest
0 голосов
/ 17 мая 2018

Есть ли способ повторять одну функцию в цикле while один раз в 5 раз, когда цикл выполняется? Я пытаюсь создать бота, чтобы он помог мне с моей латинской ревизией, но я не хочу, чтобы опция закрытия программы появлялась каждый раз, когда я отвечаю на вопрос, было бы лучше, если бы это происходило только 1 из 10 раз.

import random
exit = "no"
print "welcome to latin learner v1"
wordtype = raw_input("what would you like to learn (nouns verbs everything)")
if wordtype == "nouns":
  declension = raw_input("declension 1-5")
  if declension == "1":
    while "no" in exit:
      wordno = random.randint(1,30)
      noun1L = ["ancilla","aqua","cena","copiae","cura","dea","domina","epistula","femina","filia","hora","ianua","insula","ira","nauta","patria","pecunia","poena","porta","puella","regina","Roma","silva","taberna","terra","turba","via","victoria","villa","vita"]
      answer = raw_input(noun1L[wordno])
      noun1E = ["slave-girl" or"slave-woman","water","dinner" or "meal","forces" or "troops","care" or "worry","goddess","mistress","letter","woman","daughter","hour","door","island" or "block of flats","anger","sailor","country" or "homeland","money","punishment","gate","girl","queen","Rome","wood","shop" or "inn","ground" or "land" or "country","crowd","street" or "road" or "way","victory","house" or "country villa","life"]
      if noun1E[wordno] == answer:
        print "correct"
      else:
        print "incorrect"
        print noun1E[wordno]
      for i in range[1,5]:
        exit = raw_input("would you like to quit (yes/no)")

1 Ответ

0 голосов
/ 17 мая 2018

Чтобы решить вашу проблему, мы можем добавить счетчик вопросов и использовать оператор модуля (%) для запуска опции выхода для каждого пятого вопроса.

Однако есть и другие проблемы, которые необходимо решить. Например, это:

,"dinner" or "meal",

- это просто желаемое за действительное - оно так не работает. Мы можем превратить это в список возможных ответов. Затем, когда у нас есть параллельные массивы, такие как noun1L и noun1E, это обычно означает, что мы пропустили структуру данных. Наконец, не храните данные в коде, разделяйте их.

Вот моя переделка вашего кода для решения вышеуказанных проблем:

import random

noun1 = {
    "ancilla": ["slave-girl", "slave-woman"],
    "aqua": ["water"],
    "cena": ["dinner", "meal"],
    "copiae": ["forces", "troops"],
    "cura": ["care", "worry"],
    "dea": ["goddess"],
    "domina": ["mistress"],
    "epistula": ["letter"],
    "femina": ["woman"],
    "filia": ["daughter"],
    "hora": ["hour"],
    "ianua": ["door"],
    "insula": ["island", "block of flats"],
    "ira": ["anger"],
    "nauta": ["sailor"],
    "patria": ["country", "homeland"],
    "pecunia": ["money"],
    "poena": ["punishment"],
    "porta": ["gate"],
    "puella": ["girl"],
    "regina": ["queen"],
    "Roma": ["Rome"],
    "silva": ["wood"],
    "taberna": ["shop", "inn"],
    "terra": ["ground", "land", "country"],
    "turba": ["crowd"],
    "via": ["street", "road", "way"],
    "victoria": ["victory"],
    "villa": ["house", "country villa"],
    "vita": ["life"],
}

print("Welcome to Latin Learner v1")

wordtype = raw_input("What would you like to learn (nouns verbs everything): ")

if wordtype == "nouns" or wordtype == "everything":
    declension = raw_input("Declension 1-5: ")

    if declension == "1":
        count = 1

        while True:
            word = random.choice(list(noun1))

            answer = raw_input(word +": ")

            if answer.lower() in noun1[word]:
                print("Correct.")
            else:
                print("Incorrect: " + ", ".join(noun1[word]))

            if count % 5 == 0:
                answer = raw_input("would you like to quit (yes/no): ")
                if "y" in answer.lower():
                    break
            count += 1
...