одно выражение генератора с использованием all
isinstance(i, int)
, чтобы проверить, каждый элемент представляет собой ИНТ и 1 <= i <= 6
, чтобы убедиться, что каждый ИНТ находится в диапазоне 1-6:
def checkList(aList):
return all(isinstance(i, int) and 1 < i < 6 for i in aList)
all
будет короткое замыкание, и возвращать значение False для любое не int или любое значение меньше 1 или более 5 или возвращает True, если все элементы являются int и в диапазоне 1-6.
В своем коде вы проверяете для if i < 1
и elif i > 6
, когда вы говорите, вы хотите проверить , если каждый элемент в моем списке больше 1 и меньше, чем 6 поэтому было бы if i < 2
и elif i > 5
возвращение False, 1 является не менее 1 и 6 больше 5, поэтому исправить вашу собственную логику и проверить на ints.
def checkList(aList):
for i in aList:
if not isinstance(i, int):
return False
if i < 2:
return False
if i > 5:
return False
return True # outside loop
Вы должны переместить возвращающие вне цикла, просто потому, что один является ИНТ между 1 - 6 не означает, что все они являются.
Что можно переписать в виде:
def checkList(aList):
for i in aList:
if not isinstance(i, int):
return False
if 2 > i > 5:
return False
return True
Это не очень понятно, что вы пытаетесь сделать. Вы пытаетесь проверить только одно значение в пределах 1 и 6, или все значения должны быть между 1 и 6? – idjaw
Извините, все значения в списке. –
@CaseyJones Пожалуйста, отредактируйте свой вопрос, чтобы уточнить это. Код, который у вас есть, обработает только первый элемент в списке, потому что вы использовали оператор 'return'. – dsh