#python
#python
Вопрос:
Внутри массива есть целые числа, каждое целое число имеет либо нечетное число цифр, либо четное число цифр.
Мой вывод: просматривает каждый элемент в массиве и печатает, если по отдельности, четное или нечетное число цифр —
1
1
Ожидаемый результат: получает общее количество целых четных чисел внутри массива —
2
exampl=[22,234,2463]
def findEven(f):
countz=0
LengthOfInt=len(str(f))
if(LengthOfInt%2)==0: #if it is even, add 1 to count
countz =1
print(countz)
for i in exampl:
findEven(i)
Комментарии:
1. В чем ваш вопрос?
2. Вы хотите передать массивы в функцию?
Ответ №1:
exampl=[22,234,2463]
def findEven(f):
return len(str(f))%2==0
count=0
for i in exampl:
if findEven(i)==True:
count =1
print(count)
или
exampl=[22,234,2463]
def findEven(f):
count=0
for i in f:
if len(str(i))%2==0:
count =1
return count
print(findEven(exampl))
Ответ №2:
Здесь происходит то, что ваша переменная countz
находится внутри findEven
функции. Он устанавливается при 0
каждом запуске функции. Кроме того, print
функция запускается каждый раз, когда у вас есть четное число.
Вместо этого вы хотите создать функцию, которая возвращает логическое значение — независимо от того, имеет ли число четное количество цифр или нет. Затем вы можете посчитать значения True
или False
.
example = [22, 234, 2463]
def is_even(value):
length = len(str(value))
return length % 2 == 0
count = 0
for i in example:
if is_even(i):
count = 1
print(count)
Ответ №3:
Просто используйте это:
sum(len(str(x))%2==0 for x in exampl)
Комментарии:
1. при этом вывод печатается i раз? я поместил эту строку после оператора if
2. @VoidS Это просто дает вам результат, целое число 2.
Ответ №4:
Настройка:
exampl=[22,234,2463]
Решение:
l = [x for x in exampl if x%2 == 0]
len(l)
Ответ:
l
Out[23]: [22, 234]
len(l)
Out[24]: 2
Объяснение:
Мы берем все числа из списка exampl
в списке l
, если они делятся на два, а затем просто видим len()
, что из l
даст нам количество.
Комментарии:
1. Самый питонический ответ из всех.
2. Спасибо @sotmot! Надеюсь, это поможет кому-то понять!
Ответ №5:
Этот ответ остается как можно ближе к коду, написанному в исходном сообщении.
- Ваш
for
цикл должен быть внутриfindEven()
, чтобы вы могли найти все четные числа из этой одной функции. - Ваша
findEven()
функция должнаreturn countz
вместоprint(countz)
, и эта строка должна иметь отступ на одну табуляцию меньше.
Следующий код очень близок к оригиналу, но он должен выполнить то, что вы хотите.
exampl = [22,234,2463]
def findEven(f):
countz = 0
for i in f:
LengthOfInt = len(str(i))
if LengthOfInt % 2 == 0: #if it is even, add 1 to count
countz = 1
return countz
print(findEven(exampl))
Комментарии:
1. спасибо, это точно. однако не могли бы вы объяснить, пожалуйста, возвращаемый счет? можем ли мы оставить эту часть? или заменить на print?
2. Цель функции — дать вам ответ. Если вы
return
, то ответ будет подставлен в то место, где вы вызвали функцию, что в целом гораздо полезнее. Итак, когда вы вызываетеprint(findEven(exampl))
,findEven(exampl)
часть изменяется на числоcountz
, которое выreturn
отредактировали.