2016-11-03 6 views
3

Я строю простую викторину словаря, которая предоставляет пользователю значение из заданного хэша и принимает его или ее ответ в качестве входных данных. Если вход пользователя соответствует соответствующему ключу, программа переходит к следующему значению и повторяет этот процесс до тех пор, пока не будут учтены все пары ключ-значение в хеше.Рандомизация пар ключ-значение из хэша

В текущем состоянии викторина запрашивает у пользователя значения из хэша один за другим, по порядку, от первого до последнего.

Однако, чтобы затруднить викторину, я хотел бы, чтобы викторина предоставляла значения RANDOM из хеша, в определенном порядке.

Обычный английский ... как мне получить викторину вокала, чтобы выплевывать случайные определения из своей библиотеки, а не печатать одни и те же определения в одном порядке каждый раз?

Мой код приведен ниже. Большое спасибо за помощь каждого!

vocab_words = { 
    "class" => "Tell Ruby to make a new type of thing", 
    "object" => "Two meanings: The most basic type of thing, and any instance of some thing", 
    "instance" => "What you get when you tell Ruby to create a class", 
    "def" => "How you define a function inside a class" 
} 

vocab_words.each do |word, definition| 
    print vocab_words[word] + ": " 
    answer = gets.to_s.chomp.downcase 

    while answer != "%s" %word 
     if answer == "help" 
     print "The answer is \"%s.\" Type it here: " %word 
     answer = gets.to_s.chomp.downcase 
     else 
     print "Nope. Try again: " 
     answer = gets.to_s.chomp.downcase 
     end 
    end 
    end 

ответ

1

Использование: random_keys = vocab_words.keys.shuffle так:

vocab_words = { 
    "class" => "Tell Ruby to make a new type of thing", 
    "object" => "Two meanings: The most basic type of thing, and any instance of some thing", 
    "instance" => "What you get when you tell Ruby to create a class", 
    "def" => "How you define a function inside a class" 
} 

random_keys = vocab_words.keys.shuffle 
random_keys.each do |word| 
    print vocab_words[word] + ": " 
    answer = gets.to_s.chomp.downcase 

    if answer == "help" 
    print "The answer is \"%s.\" Type it here: " %word 
    answer = gets.to_s.chomp.downcase 
    else 
    while answer != "%s" %word 
     print "Nope. Try again: " 
     answer = gets.to_s.chomp.downcase 
    end 
    end 
end 
+0

спасибо так много! Использовал ваше предложение, и он отлично работал. Цените помощь. – and1ball0032