2014-01-14 2 views
1

Я пытаюсь создать небольшую программу на Python, которая выбирает случайную строку из списка и печатает строку. Но часто программа выбирает одну и ту же строку дважды.Python выводит строку только один раз со случайным/выбором

Есть ли способ убедиться, что каждая строка получает только один вывод?

Мой код до сих пор:

from random import choice 
food = ['apple', 'banana', 'strawberry', 'blueberry', 'orange'] 
print 'You should eat today :' + choice(food) 
print 'You should eat tomorrow :' + choice(food) 
+0

попробовать что-то вроде - для foodItem в пищевых продуктах: печать foodItem – acutesoftware

ответ

3
today = choice(food) 
tomorrow = today 
while tomorrow == today: 
    tomorrow = choice(food) 
print 'You should eat today : {}'.format(today) 
print 'You should eat tomorrow : {}'.format(tomorrow) 
5

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

import random 
food = ['apple', 'banana', 'strawberry', 'blueberry', 'orange'] 
random.shuffle(food) 

for f in food: 
    print f 

Если вам не нужно их все сразу, вы должны просто выскочить элемент, когда вы хотите (это исчерпывает список).

import random 
food = ['apple', 'banana', 'strawberry', 'blueberry', 'orange'] 
random.shuffle(food) 

try: 
    print food.pop() 
except IndexError: 
    print "No more food left!" 

# .... 
# some more code 
# I'm hungry! 

try: 
    print food.pop() 
except IndexError: 
    print "No more food left!" 

# etc. 

Попробуйте ... кроме того необходимо обработать случай, который вы хотите захватить из пищи из пустого списка.

1

Я хотел бы использовать random.sample:

>>> from random import sample 
>>> food = ['apple', 'banana', 'strawberry', 'blueberry', 'orange'] 
>>> sample(food, 2) 
['banana', 'blueberry'] 
>>> sample(food, 2) 
['orange', 'apple'] 
>>> today, tomorrow = sample(food, 2) 
>>> today 
'banana' 
>>> tomorrow 
'blueberry' 
2

Вместо choice используйте sample:

today, tomorrow = random.sample(food, 2) 

Из документов:

random.sample(population, k)

Верните a k список длин уникальных элементов, выбранных из последовательности population. Используется для случайной выборки без замены.

1

Если вы не хотите уничтожать свой список в процессе, вы можете использовать эту функцию вместо выбора.

import random 

def del_choice(food): 
    if food: 
     return food.pop(random.randrange(len(food))) 
    return None 
+1

... или перетасовать список раз и поп-рандомизированные элементы из него, пока список не пуст. – bgporter

+1

yep ... но только если вы еще не сортируете список еще раз между поп-звонками;] на самом деле, вероятно, слишком много случаев использования, чтобы обеспечить единый, решающий ответ –

Смежные вопросы