Случайные данные из файла json

Я создаю викторину, используя файлы json в качестве категорий. Я хотел бы иметь случайные категории и случайные вопросы. Мне уже удалось создать случайные категории, но я до сих пор не могу понять, как создавать вопросы для рисования из файла json.

У меня есть 4 вопроса в моем файле json, и, например, я хотел бы нарисовать 2 из них.

while True:
    if len(the_filenames) != 0:
        random_section = random.choice(the_filenames)
        print()
        print("Wylosowano dział:", random_section[:-5])
        with open(r"C:\Users\Tymek\PycharmProjects\pythonProject1\quiz!\ematyka\\" + random_section) as file:
            questions = json.load(file)
            the_filenames.remove(random_section)
            i = []
            for i in range(0, len(questions)):
                show_questions(questions[i])
                print("Twój aktualny wynik to:", points, "/", total_points)
    if len(the_filenames) == 0:
{"questions":  [
                {
                  "pytanie":"Ktore dzialanie wykonamy jako pierwsze?",
                  "a": "dzielenie",
                  "b": "odejmowanie",
                  "c": "dodawanie",
                  "d": "potęgowanie",
                  "prawidlowa_odpowiedz":"d"
                },
                {
                  "pytanie":"Podaj wynik dzialania 18-9/3*2",
                  "a": 12,
                  "b": 6,
                  "c": 16,
                  "d": 24,
                  "prawidlowa_odpowiedz":"a"
                },
                {
                  "pytanie":"Ktora z wymienionych nie jest funkcja trygonometryczna?",
                  "a": "tangens",
                  "b": "sangens",
                  "c": "cosinus",
                  "d": "cotangens",
                  "prawidlowa_odpowiedz":"b"
                },
                {
                  "pytanie":"Suma katow w trojkącie wynosi?",
                  "a": "160 stopni",
                  "b": "360 stopni",
                  "c": "90 stopni",
                  "d": "180 stopni",
                  "prawidlowa_odpowiedz":"d"
                }
              ]}
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Чтобы показать 2 вопроса из файла, просто замените

for i in range(0, len(questions)):
    show_questions(questions[i])

с:

random_questions = random.sample(questions, k=2)
for i in range(0, len(random_questions)):
    show_questions(questions[i])

Кстати,

Судя по содержимому файла, которым вы поделились, это выглядит как строка

questions = json.load(file)

нужно было бы

questions = json.load(file)['questions']

чтобы код работал правильно, но, возможно, у вас есть это.

Кроме того, как общий стилистический момент, вам не всегда нужен индекс счетчика при переборе списков.

for i in range(0, len(questions)):
    show_questions(questions[i])

эквивалентно

for question in questions:
    show_questions(question)
for i in range(anything): watch_another_python_tutorial ;) Удивительно, как много людей пытаются выучить Python, избегая всей его функциональности.
MatBailie 01.01.2023 11:19

Чтобы избежать дублирования вопросов:

import random
question_pool = [
                {
                  "pytanie":"Ktore dzialanie wykonamy jako pierwsze?",
                  "a": "dzielenie",
                  "b": "odejmowanie",
                  "c": "dodawanie",
                  "d": "potęgowanie",
                  "prawidlowa_odpowiedz":"d"
                },
                {
                  "pytanie":"Podaj wynik dzialania 18-9/3*2",
                  "a": 12,
                  "b": 6,
                  "c": 16,
                  "d": 24,
                  "prawidlowa_odpowiedz":"a"
                },
                {
                  "pytanie":"Ktora z wymienionych nie jest funkcja trygonometryczna?",
                  "a": "tangens",
                  "b": "sangens",
                  "c": "cosinus",
                  "d": "cotangens",
                  "prawidlowa_odpowiedz":"b"
                },
                {
                  "pytanie":"Suma katow w trojkącie wynosi?",
                  "a": "160 stopni",
                  "b": "360 stopni",
                  "c": "90 stopni",
                  "d": "180 stopni",
                  "prawidlowa_odpowiedz":"d"
                }
              ]
selected_questions = []
while len(selected_questions) < 2:
    selected = random.randrange(len(question_pool))
    selected_questions.append(question_pool[selected])
    del question_pool[selected]
print(selected_questions)

Другие вопросы по теме