Python. Примеры решения задач на обработку чисел




Примеры решения задач на обработку чисел


Содержание


Поиск на других ресурсах:

1. Функция GetPosMaxNum(). Определить позицию максимальной цифры числа. Поиск позиции слева направо
1.1. Нумерация позиции слева-направо (=>)

Нижеследующая функция 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 i<len(L):
        if Max<L[i]:
            Max = L[i]
            PosMax = i
        i = i+1

    return PosMax+1 # нумерация с 1

# Демонстрация работы функции GetPosMaxNum()
n = int(input("n = "))
PosMax = GetPosMaxNum(n)
print("PosMax = ", PosMax)

Результат выполнения программы

n = 111111171111
PosMax = 8

 

1.2. Реализация для направления справа-налево (<=)

Чтобы получить позицию максимального значения справа налево, нужно в функции GetPosMaxNum() изменить строку в цикле while()

L = [n%10] + L

на следующую строку

L = L + [n%10]

 

1.3. Вычисление позиции минимальной цифры целого числа

Для вычисления позиции минимальной цифры целого числа в любом направлении, нужно в примере п. 9.1 в строке сравнения

...
if Max<L[i]:
...

знак < (меньше) заменить на знак > (больше). Логично было бы также заменить имена переменных в функции:

  • Max => Min;
  • PosMax => PosMin.

Также можно заменить имя функции, например, GetPosMinNum().

 

2. Функция SumOddNum(). Вычислить сумму непарных цифр числа

В примере приведена функция SumOddNum(), которая вычисляет сумму нечетных цифр числа. Например, для числа 12397544 результат будет

1 + 3 + 9 + 7 + 5 = 25

Входным параметром функции является исходное число. Для проверки цифры на нечетность используется условие

n%2 == 1

Текст демонстрационной программы следующий

# Задача. Определить сумму непарных цифр числа.

# Функция, определяющая сумму непарных цифр числа
def SumOddNum(n):
    summ = 0 # искомая сумма

    while n>0:
        if (n%2) == 1: # проверка, нечетно ли число
            summ = summ + n%10
        n = n//10

    # Вернуть результат
    return summ

# Демонстрация использования функции SumOddNum()
n = input("n = ") # Ввести число
summ = SumOddNum(n) # Вызов функции, вычисление
print("Sum = ", summ)

Результат выполнения программы

n = 100000333
Sum = 10

 

3. Функция GetNumMore7(). Вычислить количество цифр, больших числа 7

В примере ниже реализована функция, которая в заданном числе определяет количество цифр больше 7. Например, для числа 123485379 результат будет 2 (цифры 8 и 9 являются больше 7).

# Функция, которая вычисляет количество цифр, больших за 7
def GetNumMore7(n):
    k = 0 # результат - количество цифр
    while n>0:
        if (n%10) > 7: # проверка, больше ли цифра чем 7
            k = k+1 # если цифра больше 7, то увеличить k
        n = n//10

    # Вернуть результат
    return k

# Демонстрация использования функции GetNumMore7()
n = input("n = ") # Ввести число
count = GetNumMore7(n) # Вызов функции, вычисление
print("count = ", count)

Результат выполнения программы

n = 8674493609
count = 3)

 

4. Функция GetMaxPairNum(). Вычислить максимальную четную цифру числа

В примере реализована функция, которая вычисляет максимальную четную цифру числа n (n> 0). Например, для числа 2811169 правильный результат будет цифра 8.

Если в них нет четных цифр, функция возвращает -1.

Для поиска максимума в функции выполняются следующие действия:

  • формируется список L из цифр числа;
  • вызывается стандартная функция max() поиска максимума в списке L.
# Функция, которая вычисляет максимальную четную цифру числа
def GetMaxPairNum(n):
    # Сформировать список из нечетных цифр числа
    L = []

    while n>0:
        if (n%2) == 0:     # проверка последней цифры на четность
            L = L + [n%10] # если цифра четна, то прибавить ее в список
        n = n//10 # уменьшить число

    # Вернуть результат
    if L == []:
        return -1
    else:
        return max(L) # использовать стандартную функцию max()

# Демонстрация использования функции GetNumMore7()
n = input("n = ") # Ввести число
Max = GetMaxPairNum(n) # Вызов функции, вычисление
print("Max = ", Max)

Результат выполнения функции

n = 262320113
Max = 6

 

5. Функция GetPosMinOddNum(). Вычислить позицию (номер) минимальной нечетной цифры числа
5.1. Направление определения позиции слева-направо (=>)

В примере реализована функция GetPosMinOddNum(), которая определяет позицию минимальной нечетной цифры числа n, которая является входным параметром. Номер позиции начинается с 1 и определяется в направлении слева направо (=>).

Например, для числа 22524872 правильный ответ будет 3 (минимальная нечетная цифра 5 размещается на 3-й позиции).

Если в числе нет нечетных цифр, функция возвращает -1.

С целью упрощения решения задачи, в функции выполняются следующие основные действия:

  • формируется список L из нечетных цифр числа;
  • если список L не пустой (L! = []), то определяется минимальное значение Min в списке L с помощью вызова стандартной функции min();
  • по значению Min вычисляется позиция MinPos первого вхождения Min в списке L в направлении слева направо.
# Функция, которая возвращает позицию (номер) минимальной нечетной цифры числа.
# Если в числе нету нечетных цифр, то возвращается -1.
# Номер позиции рассматривается слева-направо (=>)
def GetPosMinOddNum(n):
    # 1. Сформировать список из цифр числа
    L = []
    while n>0:
        L = [n%10] + L # слева-направо
        n = n//10

    # 2. Поиск минимума среди нечетных цифр
    # 2.1. Начальные присваивания
    fOdd = False # Сначала принять, что нечетных цифр нету в числе

    # 2.2. Цикл поиска минимальной позиции
    i = 0
    while i<len(L):
        # Обработка цифры L[i]
        if L[i]%2 == 1: # Нечетна ли L[i]?
            if fOdd == False:
                # Если первая цифра нечетна, то просто запомнить минимум
                Min = L[i]
                MinPos = i
                fOdd = True
            else:
                # Если не первая нечетная цифра, то реализовать сравнение
                if Min>L[i]:
                    Min = L[i]
                    MinPos = i
        i = i+1

    if fOdd: return MinPos+1
    else: return -1

# Демонстрация использования функции GetPosMinOddNum()
n = input("n = ") # Ввести число
Pos = GetPosMinOddNum(n) # Вызов функции, вычисление
print("Pos = ", Pos)

Результат выполнения программы

n = 22213320
Pos = 4

 

5.2. Направление определения позиции справа-налево (<=)
5.2.1. Замена строки

Чтобы определить номер позиции в направлении справа налево, нужно в предыдущем примере в цикле while() формирования списка L строку

L = [n%10] + L # слева-направо

заменить на строку

L = L + [n%10] # справа-налево

В таком случае список из цифр формируется в обратной последовательности.

 

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 = ") # Ввести число
Pos = GetPosMinOddNum(n) # Вызов функции, вычисление
print("Pos = ", Pos)

Результат выполнения программы

n = 23481234550
Pos = 7

 


Связанные темы