Задать вопрос
@Herben

Срабатывает не тот if который должен, что не так?

Делал генератор в котором пользователь сможет выбирать промежуток, вроде бы всё работает
import random

a = input("Введите ОТ скольки рандомизировать: ")
b = input("Введите ДО скольки рандомизировать: ")

c = random.randint(int(a), int(b))

print (c)


Но если ввести числа в другом порядке, то есть не от 1 до 100, а от 100 до 1, то выйдет ошибка, я сделал так чтобы счёт в обратную сторону тоже работал

import random

a = input("Введите ОТ скольки рандомизировать: ")
b = input("Введите ДО скольки рандомизировать: ")

if b > a:
    c = random.randint(int(a), int(b))
else:
    c = random.randint(int(b), int(a))
    print ('Правильный порядок ОТ и ДО, а не ДО и ОТ как сделали вы! Но число всё равно сгенерировано')
print (c)

Ввожу от 1 до 100, работает, ввожу от 100 до 1, тоже работает, но стоит ввести например: от 100 до 7, как тут же выходит ошибка с жалобой на "c = random.randint(int(a), int(b))", то есть на обычный порядок, хотя я вводил в обратном, как скрипт вообще засчитал что a = 100 меньше b = 7 ???

Traceback (most recent call last):
  File "main.py", line 7, in <module>
    c = random.randint(int(a), int(b))
  File "/usr/lib/python3.4/random.py", line 218, in randint
    return self.randrange(a, b+1)
  File "/usr/lib/python3.4/random.py", line 196, in randrange
    raise ValueError("empty range for randrange() (%d,%d, %d)" % (istart, istop, width))
ValueError: empty range for randrange() (100,8, -92)
  • Вопрос задан
  • 146 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Python-разработчик + ИИ
    8 месяцев
    Далее
Решения вопроса 4
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
if int(b) > int(a):
Ответ написан
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
if b > a:
b и a в данном случае строки, а не числа.
Ответ написан
Комментировать
@lob4Noff
Оператор input() имеет строчный тип данных, и он сравнивает значение первых символов. Чтобы ввести именно число (не строку), "оберните" input() в int():

import random

a = int(input("Введите ОТ скольки рандомизировать: "))
b = int(input("Введите ДО скольки рандомизировать: "))

if b > a:
    c = random.randint(a, b)
else:
    c = random.randint(b, a)
    print ('Правильный порядок ОТ и ДО, а не ДО и ОТ как сделали вы! Но число всё равно сгенерировано')
print (c)
Ответ написан
@Anonymous5454587
input() работает только как string, не как int.
Вот так нужно:
import random

a = int(input("Введите ОТ скольки рандомизировать: "))
b = int(input("Введите ДО скольки рандомизировать: "))
<code></code>
if b > a:
    c = random.randint(int(a), int(b))
else:
    c = random.randint(int(b), int(a))
    print ('Правильный порядок ОТ и ДО, а не ДО и ОТ как сделали вы! Но число всё равно сгенерировано')
print (c)

Результат 1:
Введите ОТ скольки рандомизировать: 10
Введите ДО скольки рандомизировать: 50
22

Результат 2:
Введите ОТ скольки рандомизировать: 50
Введите ДО скольки рандомизировать: 10
Правильный порядок ОТ и ДО, а не ДО и ОТ как сделали вы! Но число всё равно сгенерировано
23
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽