Как генерировать случайные числа в диапазоне от ВВОДА?

#python #random

#python #Случайный

Вопрос:

Это вопрос, близкий к некоторым другим, которые я нашел, но они мне не помогают, поэтому на этот раз я спрашиваю конкретно для себя и своей цели.

Я пишу код для бота, который должен запрашивать у пользователя максимальное и минимальное значение в диапазоне, а затем генерировать десять случайных чисел в этом диапазоне. При проверке мне говорят, что оба random и i являются неиспользуемыми переменными. Я действительно не понимаю, почему. Я полагал random.randint , что это должна быть встроенная функция, и что касается i этого, я действительно не знаю, чему верить. Это то, что у меня есть до сих пор.

 def RandomNumbers():
    """
    Asking the user for a min and max, then printing ten random numbers between min and max.
    """
    print("Give me two numbers, a min and a max")
    a = input("Select min. ")
    b = input("Select max. ")


    for i in range(10):
        number = random.randint(a, b)
    print(str(number)  str(","), end="")
  

Я буду очень рад каждому совету, который я смогу получить для выполнения своей задачи. Заранее спасибо!

Комментарии:

1. Что вы подразумеваете под «проверкой»? i не используется, но это нормально. Когда вы используете цикл for только для повторения, и вам не нужна переменная цикла, соглашение заключается в том, чтобы сделать это _ . Единственная проблема, которую я вижу в вашем коде, заключается в том, что последний print оператор должен находиться внутри цикла for

2. Если вы используете Python 3, используйте a = int(input("Select min. ")) , если вы используете Python 2 a = int(raw_input("Select min. ")) .

Ответ №1:

Нет. random.randint не является встроенной функцией. Вам нужно будет импортировать random модуль, чтобы использовать функцию.

С другой стороны, i очевидно, не использовался в цикле, поэтому вы обычно используете подчеркивание _ вместо i

 import random


numbers = []
for _ in range(10):
    numbers.append(random.randint(a, b))
  

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

Если вы еще не знакомы со списками, вы можете ознакомиться с документами:

Структуры данных

Списки:

Элементы списка являются произвольными объектами Python. Списки формируются путем помещения списка выражений, разделенных запятыми, в квадратные скобки


В заключение, чтобы распечатать элементы из вашего списка, вы можете использовать этот str.join метод, но не после того, как элементы в вашем списке были преобразованы из целых чисел в строки:

 output = ', '.join([str(num) for num in numbers])
print(output)
  

Комментарии:

1. Вы имели в виду numbers.append(..) ?

2. @Cajuu’ Спасибо за это

3. Обратите внимание, что в последней строке есть вероятная ошибка отступа, что означает, что он выбрасывает числа, потому что он хочет напечатать их только один раз.

4. Я не думаю, что полностью понимаю, почему «i» не используется в цикле. Я думал, что «i» — это диапазон чисел, определенный в последних двух скобках? для _ в диапазоне (10): (следовательно, в данном случае от «1» до «10»). Спасибо за объяснение использования подчеркивания, никогда не слышал об этом раньше :).

5. Также я думаю, что забыл, что мне нужно импортировать random, теперь, когда вы упомянули об этом, я вспомнил :).

Ответ №2:

Стоит упомянуть пару моментов с вашей оригинальной функцией:

  • random модуль не является встроенным, вы должны явно импортировать его.
  • input всегда возвращает строки, поэтому вам нужно преобразовать их в целые числа, прежде чем передавать их в random.randint
  • i действительно, не используется в вашем цикле for. Вы также можете заменить его на _ (подтверждая тот факт, что вы зацикливаетесь из-за побочных эффектов, например, печати, а не самой переменной).
  • Больше стилистических замечаний относительно имен функций: PEP8 (руководство по стилю Python) поощряет использование строчных букв в сочетании с подчеркиванием для разделения слов, а не верблюжьего регистра ( random_number vs RandomNumber )

Вот рабочий пример:

 import random 

def random_numbers():
    """
    Asking the user for a min and max, then printing ten random numbers between min and max.
    """
    print("Give me two numbers, a min and a max")
    a = int(input("Select min. "))
    b = int(input("Select max. "))

    numbers = [random.randint(a, b) for i in range(10)]
    print(','.join(str(n) for n in numbers))

random_numbers()
  

Комментарии:

1. Большое спасибо за ваш полный пример. Что делает последний «random_numbers ()»? Похоже, что elif, который должен быть в моем основном, заставляет мои функции работать.

2. Кроме того, должен ли «import random» стоять перед «def random_numbers():»? У меня есть несколько функций подряд, поэтому импорт random перед моим определением будет означать, что это последняя строка моей функции перед ней.

3. Последняя строка — это просто эффективный вызов random_numbers (вы можете безопасно удалить его). Лучшие практики предлагают размещать операторы импорта в верхней части файла. Но вы также можете поместить их внутрь своей функции (используя тот же отступ, конечно).

Ответ №3:

Легко)

 import random
from random import randrange

print("Give me two numbers, a min and a max")
a = int(input("Select min. "))
b = int(input("Select max. "))
c = 0
while c < 10:
    print(randrange(a, b))
    c  = 1
  

Вы можете поместить это в функцию:

 def RandomNumbers():
    import random
    from random import randrange
    
    print("Give me two numbers, a min and a max")
    a = int(input("Select min. "))
    b = int(input("Select max. "))
    c = 0
    while c < 10:
        print(randrange(a, b))
        c  = 1