Сколько целых четных чисел внутри массива (Python)

#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:

Этот ответ остается как можно ближе к коду, написанному в исходном сообщении.

  1. Ваш for цикл должен быть внутри findEven() , чтобы вы могли найти все четные числа из этой одной функции.
  2. Ваша 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. Цель функции — дать вам ответ. Если вы print , то ответ будет просто отображаться на экране. Вместо этого, если вы return , то ответ будет подставлен в то место, где вы вызвали функцию, что в целом гораздо полезнее. Итак, когда вы вызываете print(findEven(exampl)) , findEven(exampl) часть изменяется на число countz , которое вы return отредактировали.