Помогите с задачей по циклам на python

Прохожу курс по Python и попалась задача:

Нужно написать программу, которая будет считывать со стандартного ввода целочисленные границы промежутка (сначала левая, потом правая, каждая на отдельной строке). А дальше будет считывать целые числа со стандартного ввода пока не встретит пустую строку, которая будет означать конец ввода. Нужно будет проверить входят ли все введенные числа в промежуток, проверка включает в себя границы промежутка.

Я написал вот так:

g1 = input()
g2 = input()
g3 = input()
while g3 !="":
    g3 = input ()
if g1 <= g3 >= g2:
    print (True)
else:
    print (False)

Это последний вариант решения, перепробовал не одно, но всегда возвращает значение false.


Ответы (5 шт):

Автор решения: Amgarak

Попробуйте вот так:

g3= []

g1 = int(input())
g2 = int(input())

while True:
    value = input()
    if value != "":
        g3.append(int(value))
    else:
        break

test = list(filter(lambda x: g1 <= x <= g2, g3))
print(test)

Тест:

50
150
49
89
65
170
0
31
51

[89, 65, 51]

[Program finished]
–———————-–———————-

40
150
40
50
170
150

[40, 50, 150]

[Program finished]

З.Ы. Вы сравнивали числа как строки, так как input() возвращает строку str. Что бы корректно сравнивать числа, сперва полученую строку нужно преобразовать, например через int() или float().

→ Ссылка
Автор решения: Alexey Trukhanov

В Вашем коде:

  1. Ввод не конвертируется в числа из строки
  2. Не запоминаются введенные числа, g3 всегда будет пустой строкой после выхода из цикла
  3. Условие задано неверно, оно содержит взаимоисключающие условия и всегда будет False

Надо как-то так:

out = []
g1 = int(input())
g2 = int(input())
while (g3 := input()) != "":
    out.append(int(g3))

print(all([g1 <= i <= g2 for i in out]))
→ Ссылка
Автор решения: Алексей Р

Предложу такой вариант. Заводим булеву переменную valid, которая будет индикатором отсутствия недопустимых чисел, изначально задаем True. В каждой итерации цикла применяем логическое умножение valid на результат проверки очередного введенного числа g1 <= int(g3) <= g2. Если все числа подходящие, то valid будет сохранять значение True. Если же хоть одно число выйдет за границу диапазона, valid станет False.

valid, g1, g2 = True, int(input()), int(input())
while True:
    g3 = input()
    if g3 == '':
        break
    valid &= g1 <= int(g3) <= g2
print(valid)
45
100
46
88
79
99

True
→ Ссылка
Автор решения: MarianD

Ваша программа почти правильная. Я ее немножко изменил, чтобы она работала так, как вы хотите:

g1 = int(input())
g2 = int(input())
g3 = input()

while g3 != "":
    g3 = int(g3)
    if g1 <= g3 <= g2:
        print (True)
    else:
        print (False)
    g3 = input()

Объяснение изменений:

  1. Функция input() всегда возвращает строку. Когда ожидается целое число, нужно строку перевести на него функцией int().

    Для переменных g1 и g2 я это сделал сразу же — int(input()), но для переменной g3, в которой ожидается как целое число, так и (пустая) строка, я это сделал только после теста на пустую строку.

  2. Я исправил отступ команды if (вместе со всеми ее частями) - она должна находится внутри цикла, чтобы цикл не повторялся без тестирования (и обработки) текущего значения переменной g3.

  3. В условии команды if я исправил один знак неравенства.

  4. Команду g3 = input () я переместил на конец цикла, чтобы сначала проверить текущее значение переменной g3, и только после его обработки требовал от юзера новое значение.

→ Ссылка
Автор решения: Stanislav Volodarskiy

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

low = int(input())      # нижняя граница
high = int(input())     # верхняя граница
between = True          # пока все числа в интервале

while line := input():  # вводить до первой пустой строки
    # обновить флаг если нужно
    if between:
        between = low <= int(line) <= high

print(between)

P.S. Это не правда что ваша программа всегда возвращает False. Если ввести три пустые строки, будет True, что логично.

→ Ссылка