@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)
  • Вопрос задан
  • 131 просмотр
Решения вопроса 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
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы