3 / 8 / 0
Регистрация: 29.10.2016
Сообщений: 206

Адаптировать код из офлайн версии в телеграмм бота

27.11.2023, 12:43. Показов 1222. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Форумчане, Pythonисты!
Подскажите, отзовитеся!
Ваш попрошайка пост выложил - код сырой принёс;
Бежит код по пайчарму,
Из пайчарма по API Bot(а),
Из API Bot(а) во сыру сеть!
Вступление читать под "ритм" сказки "Волк и семеро козлят"

Форумчане, пожалуйста, подскажите/подправьте код для использования его на телеграмм Боте (в будущем будет диплоидным).
Нижеприведённый код работает на локальном компьютере и тестирует пользователя. Исходные данные содержатся в файле excel с именем voprosu.xlsx.
Вопросы (столбец «B») и ответы (столбец «C», столбец «D», столбец «E», столбец «F») хранятся на листе с именем «Лист1» в котором 1 столбец «A» номер по порядку, 2 столбец «B» вопрос для пользователя, 3 столбец «C» правильный ответ, 4 столбец «D» и 5 столбец «E», а также 6 столбец «F» это ложные ответы для пользователя. Ответы перемешиваются из той же строки где вопрос и предлагаться с вариантами ответов A B C D. В столбце 7 «G», содержатся комментарии к каждому вопросу, который выводится в случае ввода пользователем ложного ответа на вопрос.
Вопросы начинаются со второй строки и выбираются рандомно по 5 вопросов. Из столбца “B” файла voprosu.xlsx на листе с именем «Лист1».
Требуется после каждого ответа:
1. Вывод сообщения правильно, переход к следующему вопросу;
2. В конце итог столько-то правильно, столько-то не правильно
3. Если пользователь ввёл НЕ правильный ответ или что-то не из списка анкетирование продолжается и ответ засчитывается как НЕ правильный и выводится комментарий.
Файл с вопросами прилагаю. Они символичные просто обозначающие.

Вы мне поможете, если дополните его (исправите) для телеграмм бота.
При редактировании, пожалуйста, примите пожелания:
При приветствовании пользователя бот должен поприветствовать пользователя по нику. Вывести две кнопки "начать викторину" и "ознакомиться с информацией". При нажатии на ознакомление информации выводятся правила викторины, а при начать викторину выводится вопрос согласно ниже представленного кода, а ответы на вопросы должны содержатся в 4-х горизонтальных кнопках (друг над другом).
Если ответ не верный, см. п. 3
В конце вывод сообщения о результатах тестирования.

Буду рад если перечислите какими кнопками пользоваться и в каком месте.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import openpyxl
import asyncio
from openpyxl import load_workbook
import random
import os
import xlrd
import pandas as pd
 
class Answer:
    text: str
    truth: bool
 
    def __init__(self, text, truth=False):
        self.text = text
        self.truth = truth
 
    def __repr__(self):
        return f'{"*" if self.truth else ""} {self.text}'
 
class Question:
    text: str
    answers: list[Answer]
 
    def __init__(self, text: str, comment: str, answers: list[str]):
        self.text = text
        self.comment = comment
        self.answers = [Answer(i) for i in answers]
        self.answers[0].truth = True
        # Перемешиваем ответы
        random.shuffle(self.answers)
 
    def __repr__(self):
        return f'{self.text}: {"; ".join(map(lambda s: str(s), self.answers))}. ({self.desc})'
 
    def get_correct_answer(self):
        return [answ for answ in self.answers if answ.truth][0]
 
def main():
    # Загружаем файл Excel
    wb = openpyxl.load_workbook("voprosu.xlsx")
    sheet = wb["Лист1"]
 
    all_questions = [
        Question(row[1].value, row[6].value, [
            cell.value for cell in row[2:6]
        ])
        for i, row in enumerate(sheet.rows) if i != 0
    ]
 
    # Выбираем рандомные 5 вопросов
    questions = random.sample(all_questions, 5)
 
    # Играем в викторину
    score = 0
    for question in questions:
        # Выводим вопрос
        print(question.text)
        # Выводим варианты ответов
        for i, answer in enumerate(question.answers):
            print(f"{chr(ord('A') + i)}. {answer.text}")
 
        # Получаем ответ пользователя
        user_answer = input("Ваш ответ: ")
 
        # Проверяем ответ
        correct_answer = question.get_correct_answer()
        if user_answer == correct_answer.text:
            score += 1
            print("Правильно!")
        else:
            # Получаем комментарий к не правильному ответу
            print(question.comment)
 
    # Выводим результаты
    print("Ваш результат:", score, "правильных из", len(questions))
 
if __name__ == "__main__":
    main()
Вложения
Тип файла: xlsx voprosu.xlsx (9.2 Кб, 2 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.11.2023, 12:43
Ответы с готовыми решениями:

Адаптировать код для мобильной версии сайта
Доброго времени суток. Имеется HMTL код, который распределяет картинку справа а текст слева. При просмотре через браузер обычного ПК то все...

Вывести данные из ВК бота в телеграмм бота
Добрый день, не могу вывести данные, а точнее посты с группы, из бота вк в телеграмм бота. Как лучше это сделать? Функции находятся в...

Настройка телеграмм бота
Всем привет! В общем хочу реализовать Отправку сообщения с сервера в группу в Telegram Нашел инструкцию ... На stackoverflow ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.11.2023, 12:43
Помогаю со студенческими работами здесь

Дописать телеграмм бота
Есть рабочий телеграмм бот на python который показывает курс криптовалют Код: from telegram import Update from telegram.ext import...

Разработка телеграмм-бота на C#
Начал программирование телеграмм бота и уже в начале столкнулся с ошибкой.Ошибки: Ошибка CS1503 Аргумент 1: не удается преобразовать из...

Пишу бота на телеграмм
Пишу бота для телеграмма, подскажите пожалуйста как сделать меню для слова "фильм" (чтобы после нажатия на "фильм"...

Создание телеграмм бота
Помогите создать функцию которая будет выводить каждое второе слово предложение задом наперед.

Статистика бота телеграмм
Есть ли методы, которые позволяют вывести например: кол-во пользователей, кол-во пользователей, которые в онлайне и тд?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru