Если вы хотите что-то ближе к вашей программе, вам нужно сначала исправить ряд вещей в вашей программе - он вообще не запускается. Python чувствителен к регистру, поэтому mylist2
и myList2
отличаются. Используйте одно и то же правописание. Аналогично, false
не является встроенным Python - False
есть.
Fix те, и мы получаем:
import random
def randomNumber2(n):
myList2 = []
needMoreNumbers2 = True
while (needMoreNumbers2):
randomNumber2 = int(random.random() * 500)
myList2.append(randomNumber2)
n >= n - 100
if (n <= 500):
needMoreNumbers2 = False
return myList2
Теперь независимо от того, что прошло для n
, так долго, как n
является < = 500, который возвращает список с одним случайным целым, в 0 через 499 (включительно) , Если n
> 500, он работает вечно (бесконечный цикл). Вы можете понять, почему? if (n <= 500)
всегда истинно, если исходный n
равен < = 500, и всегда false. Ваш n >= n - 100
ничего не делает (он просто сравнивает n
с n - 100
и всегда возвращает true, что игнорируется).
Так что советуем переместить в сторону более разумные идиомы Python. Вот так и должно быть легче понять:
import random
def randomNumber2(n):
myList2 = []
while len(myList2) < n:
randomNumber2 = int(random.random() * 500)
myList2.append(randomNumber2)
return myList2
Progress ;-) Теперь мы, по крайней мере, получить обратно список с n
случайных чисел. Однако они не находятся в нужном диапазоне: int(random.random() * 500)
возвращает int в диапазоне от 0 до 499 включительно. Если вы хотите, чтобы их составляли от 100 до 500 включительно, лучший способ - сделать random.randint(100, 500)
, как уже показал вам кто-то еще. 100 + int(random.random() * 400)
является эквивалентным способом, который ближе к исходному коду, так что давайте попробуем, что:
import random
def randomNumber2(n):
myList2 = []
while len(myList2) < n:
randomNumber2 = 100 + int(random.random() * 400)
myList2.append(randomNumber2)
return myList2
Чтобы получить минимум, это в подавляющем большинстве случаев лучше просто сделать min(myList2)
в конце. Это будет не только правильно, но и быстрее, чем все, что вы можете запрограммировать самостоятельно. Если вы хотите сделать это самостоятельно, вот один из способов:
import random
def randomNumber2(n):
myList2 = []
smallest = None
while len(myList2) < n:
randomNumber2 = 100 + int(random.random() * 400)
myList2.append(randomNumber2)
if smallest is None or randomNumber2 < smallest:
smallest = randomNumber2
assert smallest == min(myList2)
return myList2
Ответ от F J, как большинство опытных питонисты бы закодировать его, хотя.
Подсказка: пусть первое случайное число будет минимальным. При последующих итерациях, если новое случайное число меньше, это значение заменит старый минимум. – tripleee
Является ли 'n> = n - 100' опечаткой? Вы не изменяете значение 'n', вы просто делаете сравнение и игнорируете результат. – chepner