2016-02-23 4 views
0

Я пытаюсь сделать викторину с несколькими вариантами выбора (4 варианта). До сих пор я сделал простую викторину, содержащую только один вопрос. Я не могу окунуться в хороший способ проиндексировать вопросы.Проведение викторины, как я могу хранить вопросы?

План заключается в том, чтобы расширить мою викторину по меньшей мере с 500 вопросами и случайным образом выбрать вопрос из пула вопросов. Как мне его структурировать?

Это то, что у меня до сих пор в моей один-вопрос игры:

def welcome(): #Introduction 
    print "Welcome to the quiz!" 
    print " " 
    print " " 


def question(): # Question function 
    quest = { 'id' : 0, 'question' : "What is the capital of Belgium?" , 'a' : "Vienna" , 'b' : "Berlin" , 'c' : "Brussels" , 'd' : "Prague" , 'answer' : 'c'} 
    print quest['question'] 
    print " " 
    print "A:", quest['a'], 
    print "B:", quest['b'], 
    print "C:", quest['c'], 
    print "D:", quest['d'] 

    guess=raw_input("Your guess: ") 
    if guess == quest['answer']: 
     print " " 
     print "Correct!!!" 
    else: 
     print " " 
     print "Sorry, that was just plain wrong!" 



welcome() 
question() 
+1

Ваш словарь - хорошее начало! Теперь сделайте список таких словарей. Затем вы можете использовать 'random.choice' для выбора случайного вопроса. – L3viathan

ответ

3

Вы можете создать список-из-словарей, которые будут размещены все эти данные. Таким образом, вы можете сделать что-то вроде этого:

quiz_data = [ 
    { 
     "question": "What year is it", 
     "choices": {"a": "2009", "b": "2016", "c": "2010"}, 
     "answer": "b" 
    }, 
    { 
     "question": "Another Question", 
     "choices": {"a": "choice 1", "b": "choice 2", "c": "choice 3"}, 
     "answer": "a" 
    } 
] 

Затем использовать random.choice, чтобы выбрать случайный индекс вашей структуры данных.

import random 

q = random.choice(quiz_data) 

print(q.get('question')) 
answer = input(q.get('choices')).lower() 

if answer == q.get('answer'): 
    print("You got it") 
else: 
    print("Wrong") 
0

магазин это как JSON массив

[{ 
    "id": 0, 
    "question": "What is the capital of Belgium?", 
    "a": "Vienna", 
    "b": "Berlin", 
    "c": "Brussels", 
    "d": "Prague", 
    "answer": "c" 
}] 

и загрузить его с помощью json.load.

+0

Я не уверен, как это * отвечает на вопрос. :/ – gsamaras

+0

@gsamaras Отвечает «Как хранить вопросы». Чтение документации для 'json' должно быть достаточным для реализации решения, которое выполняет то, что задает вопрос. –

+0

Да, я знаю Тиходрому, но я не уверен, если вы дадите достаточно информации для новичка, но это мое мнение. – gsamaras

0

Вы должны создать txt-файл и поместить вопросы в этот файл. После этого вы можете прочитать строки этого файла и выбрать строку случайным образом (строка здесь является вопросом) с методом random.choice().

В принципе, вы напишете свои вопросы в текстовом файле. Затем прочитайте строки и распечатайте строку (вопрос) с помощью random.choice().

Сделайте еще один файл txt для ответов, проверьте этот файл, когда пользователь ответил на вопрос.

0

, я бы (на основе кода):

  1. Используйте список вопросов. Этот список будет пул вопросов.
  2. Я также отказался бы от атрибута id, который у вас был, я не вижу причину использования его сейчас .
  3. Я бы выбрал случайное число в диапазоне 0 по длине список - 1, так что я могу индекс пул вопросов задать вопрос.
  4. Наконец, я отвечу на вопрос пользователя, преобразую его в в нижний регистр, а затем проверьте правильность ответа.

Вот код:

#!/usr/bin/python 

from random import randint 

def welcome(): #Introduction 
    print "Welcome to the quiz!" 
    print " " 
    print " " 


def question(): # Question function 
    question_pool = [] 
    question_pool.append({'question' : "What is the capital of Belgium?" , 'a' : "Vienna" , 'b' : "Berlin" , 'c' : "Brussels" , 'd' : "Prague" , 'answer' : 'c'}) 
    question_pool.append({'question' : "Does Stackoverflow help?" , 'a' : "Yes" , 'b' : "A lot" , 'c' : "Of course" , 'd' : "Hell yeah" , 'answer' : 'd'}) 
    random_idx = randint(0, len(question_pool) - 1) 
    print question_pool[random_idx]['question'] 
    print " " 
    print "A:", question_pool[random_idx]['a'], 
    print "B:", question_pool[random_idx]['b'], 
    print "C:", question_pool[random_idx]['c'], 
    print "D:", question_pool[random_idx]['d'] 

    guess=raw_input("Your guess: ") 
    guess = guess.lower() 
    if guess == question_pool[random_idx]['answer']: 
     print " " 
     print "Correct!!!" 
    else: 
     print " " 
     print "Sorry, that was just plain wrong!" 



welcome() 
question() 

Следующим шагом для вас, было бы подтвердить ввод, например, чтобы проверить, что пользователь ввел букву, A, B, C или D.

Вопросы, которые помогли:

  1. Generate random integers between 0 and 9
  2. How to convert string to lowercase in Python?

Я уверен, что Берлин не является столицей Бельгии :)

+0

Спасибо, это было очень полезно для меня! (я очень уверен, что ответ i C: Brussels ;-) –

+0

Haha OK @Newless_Cluebie, может быть, я провалил викторину:/Рад, что я помог, я также вижу другие ответы здесь, убедитесь, что вы принимаете лучший! :) – gsamaras

+0

пока могут быть лучшие ответы, ваш помог мне получить фреймворк, который я искал. Как новичок, лучший вариант - это не всегда то, что вы ищете, но по крайней мере это заставляет меня двигаться дальше. Я рассмотрю другие вопросы позже. Будьте осторожны, и снова - большое спасибо! –

0

Я хотел бы попробовать импортировать случайная затем генерирует случайное число между 1 и (количеством вопросов). Скажем, у вас есть 10 вопросов, вы можете набрать их так:

import random 
(Number) = (random.randint(1,10)) 

После этого вы добавляете все вопросы поодиночке, каждый из утверждений if, как показано на рисунке;

if (Number) == (1): 
    print ("What's 1 + 1?") 
    (Answer) = input() 
    if (Answer) == ('2'): 
     print ('Correct!') 
    else: 
     print ('Wrong!') 

elif (Number) == (2): 
    print ("What's 1 + 2?") 
    (Answer) = input() 
    if (Answer) == ('4'): 
     print ('Correct!') 
    else: 
     print ('Wrong!') 

И так далее.

Если вы хотите повторить его и задать несколько вопросов, начните кодирование;

while (1) == (1): 

И тогда у вас есть программа викторины. Надеюсь, кто-то нашел это полезным.

0

Я думаю, что викторина была сделана слишком сложной. Этот код легче читать и короче imo.

point = 0 
    print("The answer have to be in all small letters") 
    def question(question,rightAnswer,rightAnswer2): 
     global point 
     answer = input(question) 
     if answer == (rightAnswer): 
      point = point + 1 
      print("Right") 
     elif answer == (rightAnswer2): 
      point = point + 1 
      print("Right") 
     else: 
      print("Wrong") 
     if point == 1: 
      print("You have",point,"point")   
     else:         # grammar 
      print("You have",point,"points")  
     return 

    question("What is 1+1? ","2","2") #question(<"question">,answer,otheranswer) 
    question("What is the meaning of life ","42","idk") 
Смежные вопросы