Возвращает True, если массив содержит 2 или 3

У меня проблемы с этой проблемой CodingBat:

Если задана длина массива int 2, верните True, если она содержит 2 или 3.

Я пробовал два разных способа решить эту проблему. Может ли кто-нибудь объяснить, что я делаю неправильно?

#This one says index is out of range, why? def has23(nums): for i in nums: if nums[i]==2 or nums[i]==3: return True else: return False 
 #This one doesn't past the test if a user entered 4,3. #It would yield False when it should be true. Why? def has23(nums): for i in nums: if i==2 or i==3: return True else: return False 

Ваш первый не работает, потому что цикл for в Python не совпадает с циклом for на других языках. Вместо того, чтобы повторять индексы, он выполняет итерацию по фактическим элементам.

for item in nums примерно эквивалентно:

 for (int i = 0; i < nums.length; i++) { int item = nums[i]; ... } 

Ваш второй не работает, потому что он слишком быстро возвращает False . Если цикл встречает значение, которое не равно 2 или 3 , оно возвращает False и не пересекает любые другие элементы.

Измените свой цикл следующим образом:

 def has23(nums): for i in nums: if i == 2 or i == 3: return True # Only return `True` if the value is 2 or 3 return False # The `for` loop ended, so there are no 2s or 3s in the list. 

Или просто используйте in :

 def has23(nums): return 2 in nums or 3 in nums