Вопрос задан 04.06.2023 в 04:43. Предмет Информатика. Спрашивает Сакун Дмитрий.

Написать программу (мини-игру) на Python "Правда/ложь". В чем задание - программа будет выводить

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

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

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Данилов Роман.

Ответ:

--- 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


0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Конечно, я могу помочь вам с написанием такой мини-игры "Правда/ложь" на Python. Вот пример кода, который реализует основные требования:

python
import 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. Удачи в создании вашей мини-игры "Правда/ложь"!

0 0

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

Последние заданные вопросы в категории Информатика

Задать вопрос