Найдите сумму нечетных чисел из строки чисел в Python
Вопрос просит найти сумму нечетных чисел, когда дана строка чисел. так, например, если нам дано «123», мы должны получить сумму 4.
Это моя попытка, и она возвращает «4», что неверно.
def sumoddnum(s): total= 0 for i in range(len(s)): if i % 2 == 1: total += i return total print(sumoddnum('12345'))
Я также пробовал преобразовать s в целые числа, но он продолжает давать мне ошибку «int is not iterable»
def sumoddnum(s): total= 0 s= int(s) for i in s: if i % 2 == 1: total += i return total print(sumoddnum('12345'))
6 ответов
Мне нравится использовать здесь подход регулярных выражений. Мы можем применить шаблон регулярного выражения [13579] во входную строку, затем используйте понимание списка в полученном списке нечетных цифр, чтобы найти сумму:
num = "123" odds = re.findall(r'[13579]', num) sum = sum(int(odd) for odd in odds) print("the sum is: " + str(sum))
Причина, по которой ваша программа не работает, заключается в строке:
здесь вы берете все значения i от 0 до длины строки (без учета длины).
Это означает, что вы складываете все нечетные числа от 0 до длины строки.
Вместо этого сделайте это:
это даст вам каждый символ в строке как i. Сейчас:
def sumoddnum(s): total= 0 for i in s: i = int(i) if i % 2 == 1: total += i return total print(sumoddnum('12345'))
Это должно сработать для вас:
def sumoddnum(s): return sum(0 if int(i) % 2 == 0 else int(i) for i in s)
или если вы хотите сохранить свою первую попытку, вам следует повторить str затем проверяйте условие на каждом int характера:
def sumoddnum(s): total= 0 for i in s: if int(i) % 2 == 1: total += int(i) return total print(sumoddnum('12345'))
Ваш первый подход не работает, потому что на самом деле вы добавляете к сумме «индексы» s не элементы. То, что может иметь работа, меняет вашу for цикл для перебора элементов, а не их позиций. Тогда имейте в виду, что элементы строки являются символами, поэтому требуется преобразование в int. Это можно сделать с помощью встроенного int функция всякий раз, когда символ фактически представляет собой цифру.
def sumoddnum(s): total= 0 for i in s: if int(i) % 2 == 1: total += int(i) return total
Теперь вы можете задаться вопросом
Какая долгая функция для такой простой задачи!
и вы будете абсолютно правы. К счастью, в Python есть средства понимания, которые позволяют сократить некоторые из for петли и встроенные sum функция, назначение которой не требует пояснений, но вам нужно помнить, что она принимает итерации в качестве входных данных.
Результат, который вы можете получить, будет примерно таким:
def sumoddnum(s): return sum(int(i) for i in s if int(i) % 2 == 1)
С Python 3.8 вы также можете использовать совершенно новый оператор моржа:
def sumoddnum(s): return sum(num for i in s if (num := int(i)) % 2 == 1)
Проблема с вашим вторым подходом уже объясняется самим интерпретатором Python. Вы преобразовали свою строку в целое число, и нет встроенного способа перебора целых чисел. Вам нужно будет найти и реализовать свой собственный способ перебора целых цифр (подсказка: используйте остаток по модулю 10).
Срочно нужно решить задачи по Python.
Срочно нужно решить задачи по Python.
1)Напиши программу, которая принимает натуральное число n. Выведи сумму его нечётных цифр или 0, если таких нет.
Используй цикл while. (Ввод:6789) (Правильный вывод:16)
2)Напиши программу, которая принимает в цикле 5 целых чисел. Известно, что по модулю они не превышают 100.
Если среди этих чисел есть чётные, выведи:
• количество чётных чисел;
• максимальное чётное число.
В противном случае выведи «Нет».
Используй цикл for. (Ввод:-35 ;27; -48; 19; -56) (Правильный вывод:2;-48)
3)Напиши программу, которая принимает в цикле 7 целых чисел. Известно, что по модулю они не превышают 1000.
Если среди этих чисел есть те, которые делятся на 3, выведи:
• количество чисел, кратных 3;
• максимальное число, кратное 3.
В противном случае выведи «Нет».
Используй цикл for. (Ввод:-121; 242; -363; 484; -505; 626 ;-747) (Правильный вывод:2; -363)
4)Напиши программу, которая принимает натуральное число n > 99. Выведи его третью цифру с начала.
Используй цикл while. (Ввод:54321) (Правильный вывод:3)
n = input(«Введите натуральное число: «)
sum = 0
i = 0
while i < len(n):
digit = int(n[i])
if digit % 2 == 1:
sum += digit
i += 1
if sum == 0:
print(0)
else:
print(sum)
even_count = 0
max_even = None
for i in range(5):
num = int(input(«Введите число: «))
if num % 2 == 0:
even_count += 1
if max_even is None or num > max_even:
max_even = num
if even_count > 0:
print(even_count)
print(max_even)
else:
print(«Нет»)
divisible_count = 0
max_divisible = None
for i in range(7):
num = int(input(«Введите число: «))
if num % 3 == 0:
divisible_count += 1
if max_divisible is None or num > max_divisible:
max_divisible = num
if divisible_count > 0:
print(divisible_count)
print(max_divisible)
else:
print(«Нет»)
n = int(input(«Введите число: «))
i = 0
while n > 0:
digit = n % 10
i += 1
if i == 3:
print(digit)
break
n //= 10
почти молодец, только в последнем надо было сделать код так, что бы n был равен не только 5тизначному числу. спасибо!
Вычисления суммы нечетных цифр натурального числа
Проверить утверждение, что разность любого натурального числа и суммы его цифр кратна 9
Проверить утверждение, что разность любого натурального числа и суммы его цифр кратна 9, для всех.
Выведите числа в диапазоне от A до B, сумма четных цифр которых больше суммы нечетных
Пользователь вводит целые положительные числа (A,B). Выведите числа в диапазоне от A до B, сумма.
Вычисление суммы нечетных цифр натурального числа М
Составьте программу вычисления суммы нечетных цифр натурального числа М.
Рекурсивная функция вычисления произведения нечетных цифр натурального числа
Написать рекурсивную функцию вычисления произведения нечетных цифр натурального числа
Составьте программу вычисления квадрата суммы нечётных делителей натурального числа M
1.составьте программу вычисления квадрата суммы нечётных делителей натурального числа M.
def f(m): return sum( filter(lambda x: x & 1 == 1, map(int, str(m))) )
def f(m): return sum(map(int, str(m)[::2]))
Думаю, это только нам ТС может рассказать
def f(m): return sum(int(x) for x in str(m) if int(x)%2)
Рекурсия: вычисления суммы цифр введенного натурального числа
Написать рекурсивную функцию вычисления суммы цифр натурального числа Число вводится пользователем
Написать рекурсивную функцию вычисления суммы цифр натурального числа
Написать рекурсивную функцию вычисления суммы цифр натурального числа
Написать рекурсивную функцию вычисления суммы цифр натурального числа.
Написать рекурсивную функцию вычисления суммы цифр натурального числа. помогите пожалуйста.
Написать рекурсивную функцию вычисления суммы цифр натурального числа
Вот задача: Написать рекурсивную функцию вычисления суммы цифр натурального числа. Вот что я.
Написать рекурсивную функцию вычисления суммы цифр натурального числа
Написать рекурсивную функцию вычисления суммы цифр натурального числа.
Написать рекурсивную функцию вычисления суммы цифр натурального числа
Написать рекурсивную функцию вычисления суммы цифр натурального числа.
Примеры решения задач на обработку чисел
Нижеследующая функция GetPosMaxNum() возвращает позицию первой максимальной цифры числа. Позиция нумеруется с 1. Номер позиции определяется в направлении слева-направо.
# Функция GetPosMaxNum() - найти позицию максимальной цифры целого числа # Просмотр позиции осуществить слева-направо # Например: 283412 => 2 позиция (максимум = 8). # Функция получает параметр n (n>0) def GetPosMaxNum(n): # 1. Проверка n на корректность if (n<=0): return -1 # 2. Сформировать список из цифр числа L = [] while n>0: L = [n%10] + L n = n//10 # 3. Найти максимум в списке и позицию этого максимума # 3.1. Установить первый элемент списка Max = L[0] PosMax = 0 # 3.2. Цикл поиска максимума i = 1 while iif Maxreturn PosMax+1 # нумерация с 1 # Демонстрация работы функции GetPosMaxNum() n = int(input("n color: #800080;">print("PosMax color: #333300;">⇑1.2. Реализация для направления справа-налево ( <=)
Чтобы получить позицию максимального значения справа налево, нужно в функции GetPosMaxNum() изменить строку в цикле while()
L = [n%10] + L1.3. Вычисление позиции минимальной цифры целого числа
Для вычисления позиции минимальной цифры целого числа в любом направлении, нужно в примере п. 9.1 в строке сравнения
знак (меньше) заменить на знак > (больше). Логично было бы также заменить имена переменных в функции:
Также можно заменить имя функции, например, GetPosMinNum() .
2. Функция SumOddNum() . Вычислить сумму непарных цифр числа
В примере приведена функция SumOddNum() , которая вычисляет сумму нечетных цифр числа. Например, для числа 12397544 результат будет
Входным параметром функции является исходное число. Для проверки цифры на нечетность используется условие
Текст демонстрационной программы следующий
В таком случае список из цифр формируется в обратной последовательности.
5.2.2. Использование кода без списка
# Функция, возвращающая позицию (номер) минимальной нечетной цифры числа. # Если в числе нету нечетных цифр, то возвращается -1. # Номер позиции рассматривается справа-налево (<=) def GetPosMinOddNum (n): # Сначала принять, что нечетных цифр в числе нет fOdd = False MinPos = -1 pos = 0 while n>0: pos = pos + 1 # текущая позиция d = n%10 # взять цифру от конца if d%2 == 1: # нечетна ли цифра t? if fOdd == False : # если это первая цифра fOdd = True MinPos = pos Min = d else : # если цифра не первая, то реализовать сравнение if Min>d: MinPos = pos Min = d n = n//10 return MinPos # Демонстрация использования функции GetPosMinOddNum() n = input ( "n color: #ff0000;"># Ввести число Pos = GetPosMinOddNum(n) # Вызов функции, вычисление print ( "Pos color: #333300;">⇑
Связанные темы