2015-05-27 3 views
1

Я пытаюсь создать список с произвольной длины, заполненной списками немерной длины, используя этот код:Random не будет работать в для цикла

import random 

solitaire = [None]*(random.randint(1,5)) 

for pile in solitaire: 
    number = random.randint(0, 10) 
    solitaire.append(number)  

print(solitaire) 

достаточно легко, я думал, но когда я побежал этот код моего окна PowerShell замера, он ожидает ввод или что-то, я должен был отменить сценарий с Ctr + C, а затем получили сообщение:

Traceback (most recent call last): 
File "sparakod.py", line 254, in <module> 
number = random.randint(0, 10) 
File "C:\Python34\lib\random.py", line 218, in randint 
return self.randrange(a, b+1) 
File "C:\Python34\lib\random.py", line 170, in randrange 
def randrange(self, start, stop=None, step=1, _int=int): 
KeyboardInterrupt 

что это значит? Почему код не будет запущен?

number = random.randint(0, 10) 

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

+0

Возможно, вы хотите добавить в свой цикл инструкцию 'print solitaire'. – Kevin

+3

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

+0

О, совершенно освещаем! Большое вам спасибо! – Nekroz

ответ

1

вы ничего не говорят о содержании списков, полагая, что они также содержат случайные целые числа, то возможным решением может быть следующее:

""" 
It creates a list with random length filled with lists of random lengths containing random integers 

""" 


import random 

MIN_LIST_OF_LISTS_LENGTH = 1 
MAX_LIST_OF_LISTS_LENGTH = 10 

MIN_LIST_LENGTH = 1 
MAX_LIST_LENGTH = 5 

MIN_LIST_ELEMENT = 1 
MAX_LIST_ELEMENT = 10 


#This is the list which will containt all the lists 
solitaire = list(range(random.randint(MIN_LIST_OF_LISTS_LENGTH,MAX_LIST_OF_LISTS_LENGTH))) 


for i, pile in enumerate(solitaire): 
    solitaire[i] = [ 
     random.randint(MIN_LIST_ELEMENT, MAX_LIST_ELEMENT) for x in 
     range(0, random.randint(MIN_LIST_LENGTH, MAX_LIST_LENGTH)) 
    ] 

print(repr(solitaire)) 

Он будет генерировать выходные сигналы, подобные этим:

[[10, 3], [5, 2, 7, 7, 6], [5], [9, 3, 2, 6], [2, 4, 4], [4, 5, 10, 9, 10]] 

или

[[5, 1], [5, 1, 1], [1, 1, 7, 3, 1]] 

или

[[9, 1, 6, 7], [10, 7, 1, 7, 4]] 
+0

Спасибо, что бы определенно работать! – Nekroz

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