2013-09-10 3 views
2

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

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 

Может кто-то помочь вести меня в направлении мне нужно идти?

+2

Подсказка: пусть первое случайное число будет минимальным. При последующих итерациях, если новое случайное число меньше, это значение заменит старый минимум. – tripleee

+1

Является ли 'n> = n - 100' опечаткой? Вы не изменяете значение 'n', вы просто делаете сравнение и игнорируете результат. – chepner

ответ

6
import random 

def randomNumber2(n): 
    return min(random.randint(100, 500) for _ in range(n)) 
+0

Это более простой способ закодировать его. Глядя на мой код, есть ли способ изменить несколько вещей на моем, чтобы получить минимальное значение? – user2744489

1

Я пытаюсь взять натуральное число п, создать список п случайных чисел от 100 до 500, и возвращает минимальное значение, которое отображается в списке

Тогда, Вам не нужен список, вам просто нужно возвращать наименьшее из случайных чисел, генерируемых в n «выбрасывает»

import random 

def smallrand(n,rangemin=100,rangemax=500): 
    smallest = float('+inf') 
    for _ in xrange(n): 
     new = random.randint(rangemin, rangemax) 
     if new < smallest: smallest = new 
    return smallest 
4

Если вы хотите что-то ближе к вашей программе, вам нужно сначала исправить ряд вещей в вашей программе - он вообще не запускается. 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, как большинство опытных питонисты бы закодировать его, хотя.

+0

+1 Лучше пройдите его код, чем мой. Тем не менее, я бы также упомянул, что цикл for также предпочтителен для цикла while в этом случае. – mr2ert

+0

Да, цикл for определенно более естественен. Но я хотел бы привести код OP как можно ближе к его оригиналу, поскольку это то, о чем он продолжал просить ;-) –

+0

как вы можете просто показать только самый низкий int во всем списке? – user2744489

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