
Написать программу (мини-игру) на Python "Правда/ложь". В чем задание - программа будет выводить
какие-то "факты", а пользователь будет решать, правда это или ложь. У пользователя будут 3 жизни, которые при неправильном решении будут уменьшатся. Ваше задание - написать именно код этих жизней и показать на основе двух "фактов" (рандомных, например, сегодня мне Знания дают такой забавный факт - "У синего кита такие большие вены, что по ним сможет проплыть маленький ребенок" etc.), как их добавлять, ибо нужно больше чем 2. Деталь: 1) если пользователь напишет какую-то белиберду вместо Правда/неправда, программа сообщит об ошибке и попросит повторить. Очень попрошу за 30 балов реализовать такое, если возможно. Задание непривычное, но, это вам не формулы в Паскале. Тех, кто не знает, как писать код и что такое Python, прошу не спамить; и вообще - бегите, глупцы!

Ответы на вопрос

Ответ:
--- Python 3.8.3 ---
import typing
from typing import List
from typing import AnyStr
from typing import Tuple
from typing import Callable
from typing import Any
class FactPackLoader:
def __init__(self, TrueCode: str = '1', FalseCode: str = '0', encoding: AnyStr = 'utf-8',):
self._encoding = encoding
self._trueAnswCode = TrueCode
self._falseAnswCode = FalseCode
def LoadPack(self, FactPackPath: AnyStr, AnswSplitter: AnyStr = ':: ') -> Tuple[AnyStr, int]:
with open(FactPackPath, 'r', encoding=self._encoding) as data:
RawData = data.read().split('\n')
for FactPair in RawData:
FactPair = tuple(FactPair.split(AnswSplitter))
yield (FactPair[0], self._ToBool(FactPair[1]))
def _ToBool(self, replyCode):
if replyCode == self._trueAnswCode: return True
return False
def main():
f = FactPackLoader()
print('"Правда-Ложь"\nАвтор: KnowsUser1\nVersion: 0.0.1 Ya-Sdelyal')
IsGameRunning = 'y'
while IsGameRunning == 'y':
lives = 3
fp = input('Укажите имя файла, содержащего пак фактов:\n')
facts = f.LoadPack(fp)
for i, Q in enumerate(facts):
print(f'Вопрос {i+1}:\n{Q[0]}')
reply = True if input().lower() == 'да' else False
if reply != Q[1]:
lives -= 1
print(f'Вы не поверите, но тот факт, что {Q[0]}, действительно является правдой!\nЖизней осталось: {lives}')
else:
print(f'Вы совершенно правы!')
if lives <= 0:
print('Вы проиграли')
IsGameRunning = input('Попробуем ещё раз? Y/N\n').lower()
break
else:
print('Поздравляем, вы успешно выполнили все задания из файла!')
IsGameRunning = input('Сыграем ещё раз? Y/N\n').lower()
if __name__ == "__main__":
main()
В файле с паком вопросов после каждого вопроса должен быть указан код ответа (по умолчанию - 1 - истина, 0 - ложь), отделённый от вопроса особым символом/набором символов (по умолчанию - ':: ')
Коды ответа при необходимости в изменении указываются при создании экземпляра FactPackLoader(), символ-разделитель - при вызове LoadPack().
По умолчанию в файле с заданиями пара вопрос ответ выглядит так:
//facts.txt
На самом деле солнце белого цвета :: 1
После "::" должен стоять пробел
P.S - Код main() можно и нужно рефакторить, ибо сейчас это нечто страшное.
P.S 2 Да, я часто обращаю внимание на плохой код людей, а сейчас сам его написал. Вынепонимаете, этодругое =))
P.S 3 Проверял, программа работает. Если что то сломалось, виноват сайт. На всякий случай прикреплю файл исходного кода в .txt




Конечно, я могу помочь вам с написанием такой мини-игры "Правда/ложь" на Python. Вот пример кода, который реализует основные требования:
pythonimport random
facts = [
"У синего кита такие большие вены, что по ним сможет проплыть маленький ребенок",
"Земля круглая",
"Авокадо - это фрукт, а не овощ",
"Вода замерзает при температуре 0 градусов Цельсия"
]
lives = 3
def check_answer(answer, fact):
if answer.lower() == "правда" and fact in facts or answer.lower() == "ложь" and fact not in facts:
print("Верно!")
return True
else:
print("Неверно!")
return False
while lives > 0:
fact = random.choice(facts)
print(f"Факт: {fact}")
user_answer = input("Правда или ложь? ")
if user_answer.lower() == "правда" or user_answer.lower() == "ложь":
if check_answer(user_answer, fact):
facts.remove(fact)
else:
print("Ошибка: введите только 'правда' или 'ложь'!")
continue
if len(facts) == 0:
print("Поздравляю, вы прошли игру!")
break
if not check_answer(user_answer, fact):
lives -= 1
print(f"У вас осталось {lives} жизней")
if lives == 0:
print("К сожалению, у вас закончились жизни. Игра окончена!")
В этом примере используется список facts
, который содержит факты игры. В каждой итерации цикла while выбирается случайный факт из списка, и пользователю предлагается угадать, правда это или ложь. Если пользователь вводит правильный ответ, факт удаляется из списка facts
. Если пользователь вводит неправильный ответ или что-то отличное от "правда" или "ложь", жизнь уменьшается на 1.
Если у пользователя заканчиваются жизни (lives == 0
), игра завершается. Если пользователь угадывает все факты и список facts
становится пустым, выводится сообщение о победе.
Вы можете добавить больше фактов, просто добавляя их в список facts
. Удачи в создании вашей мини-игры "Правда/ложь"!


Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili