Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 18, 2016 06:45:21

Monkey_Dank
Зарегистрирован: 2016-02-16
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Случайное слово из списка, без повторений

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

import random
list = ['стул', 'окно', 'кровать', 'диван', 'батарея', 'лампа', 'дверь']
count = len(list)
while count != 0:
    print(random.choice(list))
    count -=1
input("\nenter")

Так работает, но естественно с повторением слов, поэтому попробовал вот так:
while count != 0:
    print(random.randint(0,(list) -1)
    count -=1
Выдает ошибку, как я понимаю что randint работает только с числами, поэтому мысль такова: запилить выборочный выбор по индексу из списка, а потом вывести на экран слова по индексу( уже заранее random выбранных), но я не пойму как это сделать или есть более простое решение?

Офлайн

#2 Фев. 18, 2016 07:38:54

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Случайное слово из списка, без повторений

l = ['стул', 'окно', 'кровать', 'диван', 'батарея', 'лампа', 'дверь']
l2 = random.shuffle(l)



Офлайн

#3 Фев. 18, 2016 07:50:51

Monkey_Dank
Зарегистрирован: 2016-02-16
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Случайное слово из списка, без повторений

FishHook
хм,я получаю значение None, что не правильно?
list = ['стул', 'окно', 'кровать', 'диван', 'батарея', 'лампа', 'дверь']
list2 = random.shuffle(list)
for i in list:
    print(list2)

Офлайн

#4 Фев. 18, 2016 08:42:33

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Случайное слово из списка, без повторений

Monkey_Dank
форумчанин FishHook подзабыл такой момент что shuffle() метод не возвращает новый список, а перемешивает существующий:

>>> l = ['стул', 'окно', 'кровать', 'диван', 'батарея', 'лампа', 'дверь'] # исходный список
>>> l2 = l[:] # копия исходного списка на случай если не нужно менять исходный
>>> random.shuffle(l2)
>>> l2 # перемешанный список
['батарея', 'лампа', 'диван', 'дверь', 'стул', 'кровать', 'окно']



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Фев. 18, 2016 10:03:08

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Случайное слово из списка, без повторений

А ну да, виноват, я честно говоря код не проверял.



Офлайн

#6 Фев. 19, 2016 08:44:23

Monkey_Dank
Зарегистрирован: 2016-02-16
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Случайное слово из списка, без повторений

JOHN_16
Monkey_Dankфорумчанин FishHook подзабыл такой момент что shuffle() метод не возвращает новый список, а перемешивает существующий:
В интерактвном режиме все работает, вот пишу в файле:
list = ['стул', 'окно', 'кровать', 'диван', 'батарея', 'лампа', 'дверь']
list2 = list[:] #скопировали список
print(random.shuffle(list2)) #пытаюсь вывести скопированный список, в интерактивном выводится, почему здесь я не могу вывести его
input("\nenter")

Офлайн

#7 Фев. 19, 2016 09:57:42

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Случайное слово из списка, без повторений

Что значит “не могу?” Рука не поднимается, как коня пристрелить?
Вы на техническом форуме или где?



Офлайн

#8 Фев. 19, 2016 10:08:01

Monkey_Dank
Зарегистрирован: 2016-02-16
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Случайное слово из списка, без повторений

FishHook
Что значит “не могу?” Рука не поднимается, как коня пристрелить? Вы на техническом форуме или где?
Мне выдает None, вы знаете почему так, а я нет, если не хотите помочь, лучше вообще не отвечайте на сообщения, спасибо за участие.

Офлайн

#9 Фев. 19, 2016 10:22:40

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Случайное слово из списка, без повторений

Monkey_Dank
Мне выдает None
Monkey_Dank
форумчанин FishHook подзабыл такой момент что shuffle() метод не возвращает новый список, а перемешивает существующий:

PS: не надо возмущаться не по делу, если бы я не хотел вам помочь, я бы не помогал.
Вы должны отдавать себе отчет в том, что вы находитесь на техническом форуме, а не на поэтическом, поэтому свои вопросы вы обязаны формулировать корректно, четко и использовать соответствующие профилю форума термины.
Если бы вы сразу сказали нормально “код возвращает неожиданное для меня значение, вместо ожидаемого …. я получаю …..” то никто бы вас не тыкал носом.



Отредактировано FishHook (Фев. 19, 2016 10:22:56)

Офлайн

#10 Фев. 19, 2016 10:25:03

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Случайное слово из списка, без повторений

Если функция в питоне не возвращает ничего, это значит, что она возвращает None.
random.shuffle(list2) возвращает None, что вы и видите на экране.
Вам уже дали правильное решение

l = ['стул', 'окно', 'кровать', 'диван', 'батарея', 'лампа', 'дверь'] # исходный список
l2 = l[:]
random.shuffle(l2)
print(l2)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version