random.choice без дубликатов в кортеже в python - PullRequest
1 голос
/ 03 мая 2020

Я делаю простую игру для перевода, и я не хочу дублировать «викторину» при запуске этого кода.

Вот мой текущий код, который задает дублирующие вопросы:

sentence = ("naranja", "azul", "llamada", "blanco", "negro", "cancion", "rojo", "hielo", "cara")

answer = ("orange", "blue", "call", "white", "black", "sing", "red", "ice", "face")

num = 0

while num <= len(sentence):
    quiz = random.choice(sentence)
    order = sentence.index(quiz)
    print(quiz)
    a = input("Translate in English : ")
    if a == answer[order]:
        print("Correct!")

    else :
        print("Wrong!", answer[order])

Ответы [ 2 ]

3 голосов
/ 03 мая 2020

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

Вы можете получить пары (вопрос, ответ), используя zip , а затем использовать random .shuffle , чтобы перемешать этот список, и вам нужно просто выполнить итерации по ним:

from random import shuffle


sentence = ("naranja", "azul", "llamada", "blanco", "negro", "cancion", "rojo", "hielo", "cara")
answer = ("orange", "blue", "call", "white", "black", "sing", "red", "ice", "face")

associations = list(zip(sentence, answer))
shuffle(associations)

for quiz, answer in associations:
    print(quiz)
    a = input("Translate in English : ")
    if a == answer:
        print("Correct!")
    else :
        print("Wrong!", answer)
1 голос
/ 03 мая 2020

Попробуйте использовать случайную функцию sample. Это может быть использовано для предоставления вам случайного списка из n элементов из данного списка без дубликатов. Здесь вы можете взять образец с размером длины вопросов, а затем перебрать вопросы викторины:

import random

sentence = ("naranja", "azul", "llamada", "blanco", "negro", "cancion", "rojo", "hielo", "cara")

answer = ("orange", "blue", "call", "white", "black", "sing", "red", "ice", "face")

num = 0

# Get a randomly ordered list of the questions
quiz_questions = random.sample(sentence, len(sentence))

# Iterate over the random list
for quiz in quiz_questions:
    order = sentence.index(quiz)
    print(quiz)
    a = input("Translate in English : ")
    if a == answer[order]:
        print("Correct!")

    else :
        print("Wrong!", answer[order])
...