К содержанию

Анатолий
Анатольевич
Eфремов

Тема 2 «Целочисленная арифметика»

Видеолекция по теме «Арифметические операции, целочисленная арифметика»


Теоретический материал - Типы данных в Python

Запуск простейшей программы

В предыдущем задании мы использовали Питон для простых разовых вычислений, используя интерактивный режим. Например, было задание вычислить длину гипотенузы прямоугольного треугольника по ее катетам. Запустите текстовый редактор и напишите следующий текст:

a = 179
b = 197
c = (a ** 2 + b ** 2) ** 0.5
print(c)

Здесь мы используем переменные — объекты, в которых можно сохранять различные (числовые, строковые и прочие) значения. В первой строке переменной a присваивается значение 179, затем переменной b присваивается значение 971, затем переменной c присваивается значение арифметического выражения, равному длине гипотенузы.

После этого значение переменной c выводится на экран.

Сохраните этот текст в файле с именем hypot.py. Запустите терминал, перейдите в каталог, где лежит этот файл и выполните эту программу:

$ python3 hypot.py

Интерпретатор языка Питон, запущенный с указанием имени файла, запускается не в интерактивном режиме, а выполняет ту последовательность команд, которая сохранена в файле. При этом значения вычисленных выражений не выводятся на экран (в отличии от интерактивного режима), поэтому для того, чтобы вывести результат работы программы, то есть значение переменной c, нам понадобится специальная функция print.

Ввод данных: функция input()

Пример выше неудобен тем, что исходные данные для программы заданы в тексте программы, и для того, чтобы использовать программу для другого треугольника необходимо исправлять текст программы. Это неудобно, лучше, чтобы текст программы не менялся, а программа запрашивала бы у пользователя данные, необходимые для решения задачи, то есть запрашивала бы значения двух исходных переменных a и b. Для этого будем использовать функцию input(), которая считывает строку с клавиатуры и возвращает значение считанной строки, которое сразу же присвоим переменным a и b:

a = input()
b = input()

Правда, функция input возвращает текстовую строку, а нам нужно сделать так, чтобы переменные имели целочисленные значения. Поэтому сразу же после считывания выполним преобразование типов при помощи функции int, и запишем новые значения в переменные a и b.

a = int(a) b = int(b)

Можно объединить считывание строк и преобразование типов, если вызывать функцию int для того значения, которое вернет функция input:

a = int(input())
b = int(input())

Далее в программе вычислим значение переменной c и выведем результат на экран.

Теперь мы можем не меняя исходного кода программы многократно использовать ее для решения различных задач. Для того нужно запустить программу и после запуска программы ввести с клавиатуры два числа, нажимая после каждого числа клавишу Enter. Затем программа сама выведет результат.

Вывод данных: функция print()

Функция print может выводить не только значения переменных, но и значения любых выражений. Например, допустима запись print(2 + 2 ** 2). Также при помощи функции print можно выводить значение не одного, а нескольких выражений, для этого нужно перечислить их через запятую:

a = 1
b = 2
print(a, '+', b, '=', a + b)

В данном случае будет напечатан текст 1 + 2 = 3: сначала выводится значение переменной a, затем строка из знака “+”, затем значение переменной b, затем строка из знака “=”, наконец, значение суммы a + b.
Обратите внимание, выводимые значение разделяются одним пробелом. Но такое поведение можно изменить: можно разделять выводимые значения двумя пробелами, любым другим символом, любой другой строкой, выводить их в отдельных строках или не разделять никак. Для этого нужно функции print передать специальный именованный параметр, называемый sep, равный строке, используемый в качестве разделителя (sep — аббревиатура от слова separator, т.е. разделитель). По умолчанию параметр sep равен строке из одного пробела и между значениями выводится пробел. Чтобы использовать в качестве разделителя, например, символ двоеточия нужно передать параметр sep, равный строке ':':

print(a, b, c, sep = ':')

Аналогично, для того, чтобы совсем убрать разделитель при выводе нужно передать параметр sep, равный пустой строке:

print(a, '+', b, '=', a + b, sep = '')

Для того, чтобы значения выводились с новой строке, нужно в качестве параметра sep передать строку, состоящую из специального символа новой строки, которая задается так:

print(a, b, sep = '\n')

Символ обратного слэша в текстовых строках является указанием на обозначение специального символа, в зависимости от того, какой символ записан после него. Наиболее часто употребляется символ новой строки '\n'. А для того, чтобы вставить в строку сам символ обратного слэша, нужно повторить его два раза: '\\'.

Вторым полезным именованным параметром функции print является параметр end, который указывает на то, что выводится после вывода всех значений, перечисленных в функции print. По умолчанию параметр end равен '\n', то есть следующий вывод будет происходить с новой строки. Этот параметр также можно исправить, например, для того, чтобы убрать все дополнительные выводимые символы можно вызывать функцию print так:

print(a, b, c, sep = '', end = '')

Целочисленная арифметика

Для целых чисел определены ранее рассматривавшиеся операции +, -, * и **. Операция деления / для целых чисел возвращает значение типа float. Также функция возведения в степень возвращает значение типа float, если показатель степени — отрицательное число.

Но есть и специальная операция целочисленного деления, выполняющегося с отбрасыванием дробной части, которая обозначается //. Она возвращает целое число: целую часть частного. Например:

>>>17 // 3
5
>>> -17 // 3
-6

Другая близкая ей операция: это операция взятия остатка от деления, обозначаемая %:

>>> 17 % 3
2
>>> -17 % 3
1



Задача №3455. Гипотенуза

Дано два числа a и b. Выведите гипотенузу треугольника с заданными катетами.

Входные данные
Вводятся два целых положительных числа, не превышающих 1000.

Выходные данные
Выведите ответ на задачу с точностью 10 знаков после запятой

Примеры

Ввод Вывод
3
4
5.0

Решение
a = int(input())
b = int(input())
c = (a ** 2 + b ** 2) ** 0.5
print(c)



Задача №3456. Hello, Harry!

Напишите программу, которая приветствует пользователя, выводя слово Hello, введенное имя и знаки препинания по образцу (см. пример входных и выходных данных). Программа должна считывать в строковую переменную значение и писать соответствующее приветствие. Обратите внимание, что после запятой должен обязательно стоять пробел, а перед восклицательным знаком пробела нет.

Входные данные
Вводится строка, длина которой не превышает 100 символов.

Выходные данные
Выведите ответ на задачу.

Примеры

Ввод Вывод
Harry Hello, Harry!

Решение
a = input()
b = "Hello, "
print(b + a, end="!")



Задача №3457. Следующее и предыдущее

Напишите программу, которая считывает целое число и выводит текст, аналогичный приведенному в примере (пробелы важны!):

Входные данные
Вводится целое число (гарантируется, что число находится в диапазоне от -1000 до +1000).

Выходные данные
Выведите две строки, согласно образцу.

Примеры

Ввод Вывод
179 The next number for the number 179 is 180.
The previous number for the number 179 is 178.

Решение
a = int(input())
print("The next number for the number", a, "is", str(a + 1) + ".")
print("The previous number for the number", a, "is", str(a - 1) + ".")



Задача №3458. Дележ яблок - 1

n школьников делят k яблок поровну, неделящийся остаток остается в корзинке. Сколько яблок достанется каждому школьнику?

Входные данные
Программа получает на вход числа n и k - целые, положительные, не превышают 10000.

Выходные данные
Выведите ответ на задачу.

Примеры

Ввод Вывод
3
14
4

Решение
n = int(input())
k = int(input())
print(k // n)



Задача №3459. Дележ яблок - 2

n школьников делят k яблок поровну, неделящийся остаток остается в корзинке. Сколько яблок останется в корзинке?

Входные данные
Программа получает на вход числа n и k - целые, положительные, не превышают 10000.

Выходные данные
Выведите ответ на задачу.

Примеры

Ввод Вывод
3
14
2

Решение
n = int(input())
k = int(input())
print(k % n)



Задача №3476. Дележ яблок - 3

n школьников делят k яблок “поровну”, то есть так, чтобы количество яблок, доставшихся любым двум школьникам, отличалось бы не более, чем на 1.

Входные данные
Программа получает на вход числа n и k.

Выходные данные
Программа должна вывести количество школьников, которым достанется яблок меньше, чем некоторым из их товарищей.

Примеры

Ввод Вывод
7
30
5

Решение
n = int(input())
k = int(input())
print((n - k % n) % n)



Задача №3460. МКАД

Длина Московской кольцевой автомобильной дороги — 109 километров. Байкер Вася стартует с нулевого километра МКАД и едет со скоростью v километров в час. На какой отметке он остановится через t часов?

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

Входные данные
Программа получает на вход значение v и t. Если v>0, то Вася движется в положительном направлении по МКАД, если же значение v<0, то в отрицательном. (Гарантируется, что исходные числа - целые и находятся в промежутке от -1000 до +1000).

Выходные данные
Программа должна вывести целое число от 0 до 108 — номер отметки, на которой остановится Вася.

Примеры

Ввод Вывод
60
2
11

Ввод Вывод
-1
1
108

Решение
v = int(input())
t = int(input())
s = v * t
point = s // 109
print(-(109 * point - s))



Задача №3461. Последняя цифра

Дано натуральное число. Выведите его последнюю цифру.

Входные данные
Вводится единственное число (гарантируется, что оно не превышает 10000).

Выходные данные
Выведите ответ на задачу.

Примеры

Ввод Вывод
179 9

Решение
x = int(input())
print(x % 10)



Задача №3462. Число десятков двузначного числа

Дано двузначное число. Найдите число десятков в нем.

Входные данные
Вводится единственное число (гарантируется, что оно соответствует условию задачи).

Выходные данные
Выведите ответ на задачу.

Примеры

Ввод Вывод
42 4

Решение
x = int(input())
print(x // 10)



Задача №3463. Число десятков

Дано натуральное число. Найдите число десятков в его десятичной записи.

Входные данные
Вводится единственное число (гарантируется, что число не превышает 106).

Выходные данные
Выведите ответ на задачу.

Примеры

Ввод Вывод
179 7

Решение
x = int(input())
print(x // 10 % 10)



Задача №3464. Сумма цифр

Дано трехзначное число. Найдите сумму его цифр.

Входные данные
Вводится целое положительное число. Гарантируется, что оно соответствует условию задачи.

Выходные данные
Выведите ответ на задачу.

Примеры

Ввод Вывод
179 17

Решение
"""
1 7 9
a b c
"""
n = int(input())
a = n // 100
b = n % 100 // 10
c = n % 10
print(a + b + c)



Задача №3465. Следующее четное

Дано целое число n. Выведите следующее за ним четное число.

Задачу необходимо решить целочисленными операциями без использования условных операторов (в том числе без тернарного оператора ?: в С++) и\или циклов.

Входные данные
Вводится целое положительное число, не превышающее 1000.

Выходные данные
Выведите ответ на задачу.

Примеры

Ввод Вывод
7 8

Ввод Вывод
8 10

Решение
x = int(input())
print((x // 2 + 1) * 2)



Задача №3535. Пингвины

Напишите программу, которая по данному числу n от 1 до 9 выводит на экран n пингвинов. Изображение одного пингвина имеет размер 5×9 символов, между двумя соседними пингвинами также имеется пустой (из пробелов) столбец. Разрешается вывести пустой столбец после последнего пингвина. Для упрощения рисования скопируйте пингвина из примера в среду разработки.

Входные данные
Вводится натуральное число.

Выходные данные
Выведите ответ на задачу.

Примечание
Учтите, что вывод данных на экран производится построчно, а не попингвинно.

В некоторых языках программирования символ обратного слэша “\” в текстовых строках имеет специальное значение. Чтобы включить в состав текстовой строки такой символ, его нужно повторить дважды. Например, для вывода на экран одного такого символа можно использовать такой код: print("\\").

Примеры

Ввод Вывод
3    _~_       _~_       _~_    
  (o o)     (o o)     (o o)  
 /  V  \   /  V  \   /  V  \  
/(  _  )\  /(  _  )\  /(  _  )\ 
^^ ^^  ^^ ^^  ^^ ^^ 

Ввод Вывод
1    _~_    
  (o o)   
 /  V  \  
/(  _  )\ 
^^ ^^    

Решение
a = int(input())
print(a * '  _~_    ')
print(a * '  (o o)   ')
print(a * ' /  V  \  ')
print(a * '/(  _  )\ ')
print(a * '  ^^ ^^   ')