#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 только для повторения, и вам не нужна переменная цикла, соглашение заключается в том, чтобы сделать это_
. Единственная проблема, которую я вижу в вашем коде, заключается в том, что последний2. Если вы используете Python 3, используйте
a = int(input("Select min. "))
, если вы используете Python 2a = 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
vsRandomNumber
)
Вот рабочий пример:
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