2014-12-28 2 views
1

У меня есть проект, чтобы завершить из книги, которая была получена в качестве рождественского подарка (Python Программирование для Абсолютного Новичка, Третье издание):Распечатайте список слов в случайном порядке - Python

Создать программу, которая печатает список слов в произвольном порядке. Программа должна печатать все слова, а не повторять их.

Я создал следующий код:

import random 

words = ["Please", "Help", "Me", "Merry", "Christmas"] 

for i in range(len(words)): 
    random_index = random.randrange(len(words)) 
    print(words[random_index]) 
    del words[random_index] 

я хотел бы проверить, если этот код является наиболее эффективный способ сделать это, но нет форума, чтобы проверить против, а удручающе!

Есть ли лучший способ сделать это? Приветствия

ответ

7

Как об использовании random.sample:

>>> import random 
>>> words = ["Please", "Help", "Me", "Merry", "Christmas"] 
>>> random.sample(words, len(words)) 
['Merry', 'Me', 'Help', 'Please', 'Christmas'] 

или random.shuffle если это нормально, чтобы изменить первоначальный список:

>>> random.shuffle(words) 
>>> words 
['Me', 'Merry', 'Help', 'Please', 'Christmas'] 
1
import random 
random.shuffle(words) 
print words 

Рэнд модуль, который предоставляет вам с встроенным методом, который называется , shuffle(), который можно использовать для изменения элементов аргумента списка, переданных в любом случайном порядке.

1

Другой, чем при использовании sample или shuffle функцию Python непосредственно, как другие предположили, ваше решение работает нормально, но у него есть недостаток опорожнения оригинального words списка, который, вероятно, не желательно.

С этой целью выполняется как на месте, так и копирование в случайном порядке.

import random 

words = ["Please", "Help", "Me", "Merry", "Christmas"] 

# in-place or copy shuffle 
def shuffle(in_words, copy=False): 
    in_words = in_words[:] if copy else in_words 
    for i in range(len(in_words)): 
     pos = random.randrange(len(in_words)) 
     in_words[i], in_words[pos] = in_words[pos], in_words[i] 
    return in_words 
# see if it works 
print "unshuffled", words 
print "shuffled %s (was: %s)" % (shuffle(words, copy=True), words) 
print "in-place shuffled", shuffle(words) 
-1
list=["hello","bye","good night","welcome"] 

new_list=[] 

import random 


while len(new_list)!=4: 

    word=random.choice(list) 

    if word not in new_list: 

     new_list.append(word) 

    else: 

     new_word.remove(word) 

print(new_list) 
+0

Пожалуйста, пост код как текст, а не как изображение –

0

импорт случайных

words = ["Please", "Help", "Me", "Merry", "Christmas"] 

for i in range(len(words)): 
    random_index = random.randrange(len(words)) 
    print(words.pop(random_index)) 
+0

Не могли бы вы добавить некоторые объяснения и почему это более эффективно (например, это быстрее или просто меньше кода, больше читать e, использует лучшие практики и т. д.)? –

1

Если вы хотите использовать только вещи глава о, чем, возможно, это может быть одним из решений:

import random 

myList = ["create", "a", "program", "that", "prints"] 

for i in range(len(myList)): 
    randomWord = random.choice(myList) 
    print(randomWord) 
    myList.remove(randomWord) 

input("\nPress enter to exit.") 
Смежные вопросы