Раздел «Язык Си».PythonQuickstart1:

Обзор языка Python. Часть 1

Самая простая программа. Печатаем текст

Напечатаем текст "Hello"

Чтобы программа могла работать не нужно ничего лишнего. Сразу пишем команду печати print

print('Hello')

IDEA! Строку можно писать:

Вычисления

Для вычислений нужны числа. Числа помещают в память компьютера. Каждое число помещают в свое место. Каждое место имеет имя и тип числа. Могут быть целые числа и дробные числа.

Посчитаем значение выражения 2+3 и напечатаем результат

Можно сделать так:

print(2+3)

А можно использовать переменную

x = 2+3      # создали переменную х и положили в нее 5. Тип х сейчас int
print(x)     # печатаем значение, которое хранит х.

Арифметические операторы:

print(11+2)  # 13
print(11-2)  # 9
print(11/2)  # 5.5 деление
print(11//2) # 5 целочисленное деление
print(11%2)  # 1 остаток от деления

Типы переменных

Каждая переменная знает, какой тип данных сейчас в ней хранится.

У переменной нет типа. Тип есть только у данных, которые она хранит.

Функция type() возвращает тип данных.

x = 5
print(x, type(x))  # 5 int
x = 3.14
print(x, type(x))  # 3.14 float
x = "Hello"
print(x, type(x))  # Hello string

Изменить тип

Изменить тип данных можно функциями int(), float(), str()

x = "3.14"
print(x, type(x))  # 3.14 string
x = float(x)
print(x, type(x))  # 3.14 float
x = int(x)
print(x, type(x))  # 3 int

x = "Hello"
print(x, type(x))  # Hello string
x = int("Hello")   # НЕЛЬЗЯ!

Печатаем значения разных типов

Если нужно напечатать значение нескольких выражений, напишите их через запятую

x = 3
y = 5.5
z = "Hello"
print(x, y, z)  # 3 5.5 Hello

Если хотим печатать красиво, надо писать формат. Формат зависит от типа данных.

x = 3
y = 5.5
z = "Hello"
print("первое число %d, второе %f, потом текст %s" % (x, y, z))  
# первое число 3, второе 5.5, потом текст Hello

IDEA! print("%.2f" % (3.1415) ) напечатает число 3.1415 как 3.14 (2 знака после .)

IDEA! print("%02d:%02d" % (13, 5) ) напечатает 13 и 5 как 13:05

Чтение переменных

Функция input() читает 1 строку с клавиатуры.

x = input()

Чтобы прочитать с клавиатуры 2 строки, нужно 2 раза вызвать input()

x = input()   # первую строку прочитали и записали в переменную х
y = input()   # вторую строку прочитали и записали в переменную y

Напишем программу, которая складывает 2 целых числа.

x = input()   # 3
y = input()   # 5
print(x+y)    # 35 ???

Почему 35?

x = input()        # 3
y = input()        # 5

print(x, type(x))  # 3 string
print(y, type(y))  # 5 string

z = x+y
print(z, type(z))  # 35 string (две строки написали рядом - конкатенация, concatenation)

Потому что input() вернула строку. У нас есть строка "3" и строка "5", а не числа 3 и 5. Строки оператором + соединяются вместе в строку "35". Строки пишутся одна за другой.

Как исправить?

Мы знаем, что числа будут целые. Поэтому сразу изменим тип данных на int.

x = input()        # 3
y = input()        # 5

x = int(x)
y = int(y)

print(x, type(x))  # 3 int
print(y, type(y))  # 5 int

z = x+y
print(z, type(z))  # 8 int (работаю правила сложения целых чисел)

Можно написать короче. Сразу делаем прочитанные данные int

x = int(input())   # 3, прочитали строку, сделали из строки int
y = int(input()    # 5, прочитали строку, сделали из строки int

print(x, type(x))  # 3 int
print(y, type(y))  # 5 int

z = x+y
print(z, type(z))  # 8 int (работаю правила сложения целых чисел)

Пример 1. Периметр и площадь

Дано: стороны прямоугольника a и b.
Написать программу, которая по двум сторонам находит (и печатает) периметр и площадь прямоугольника.

# -*- coding: utf-8 -*-
# чтобы можно было писать русские буквы и иероглифыa = int(input())
a = int(input())
b = int(input())

per = (a+b)*2
s = a*b

print("Периметр = %d" %(per))
print("Площадь = %d" % (s))

Задача 0. Обед

Дано: рис стоит k рублей, салат стоит n рублей. На обед студент купил 1 порцию риса и 2 порции салата. Напечатать: сколько рублей стоит обед.

Написать в тетради на каких данных будете проверять программу.

Рис Салат Стоит обед (ожидаю) Напечатала программа
30 40 110  
       

Задача 1. s = v*t

Дано: электричка проехала s километров за t часов.
Написать программу, которая печатает скорость электрички в км/ч.

Написать в тетрадку данные, на которых вы проверяли программу. Например:

s дано t дано v - ожидаемый результат напечатала программа
72 2 36  
31 2 15.5  
       

Задача 2. Делаем стулья

Дано: n - количество ножек стула. У 1 стула 4 ножки. Напечатать: сколько стульев можно сделать из этих ножек?

Написать в тетрадку данные, на которых вы проверяли программу.

Задача 3. Ставим стулья

Площадь комнаты - s (дробное число). Длина одной стороны ln (дробное число). Ширина стула ch (дробное число). Вычислить сколько стульев res (целое число) можно поставить у ДРУГОЙ стороны комнаты. Сделать таблицу для проверки результатов.

Функции

Вы уже пользовались функциями языка python. Это print(), input(), int(), float().

Можно написать функцию самим.

Простая функция

Напишем функцию, у которой нет аргументов и которая ничего не возвращает. Придумаем имя функции hi. Функция печатает hello.

# делаем функцию. 
# def - ключевое слово
# hi - придумали (сами) имя функции
def hi():
    print("hello")   # код функции пишем с отступами

# закончились отступы - закончилась функция.
hi()   # вызов функции hi, функция печатает hello
hi()   # вызов функции hi, функция печатает hello

IDEA! Не забывайте : после )

Передаем в функцию числа

Напишем вычисление периметра и площади прямоугольника через функции. Тогда можно будет просто посчитать периметр и площадь разных прямоугольников в одной программе.

У функции могут быть аргументы. Для вычисления периметра и площади прямоугольника нужно передать функции стороны прямоугольника.

IDEA! Один раз создали функцию. Много раз можем использовать функцию.

# -*- coding: utf-8 -*-
# чтобы можно было писать русские буквы и иероглифыa = int(input())

def perimetr(a, b):  # создали первую функцию perimetr, в нее передают два числа a и b
  res = (a+b)*2
  return res         # возвращает число
                     # первая функция закончилась

def area(a, b):      # создали другую функцию area, в нее передают два числа a и b
  res = a*b
  return res
  
p = perimetr(3,5)             # результат функции perimetr поместили в переменную p
print("Периметр = %d" % (p))  # напечатали p (Периметр = 16)
s = area(3,5)                 # результат функции area поместили в переменную s
print("Площадь = %d" % (s))   # напечатали s (Площадь = 15)

                              # можно сразу печатать результат функции
print("Периметр = %d" % (perimetr(3,5)))
print("Площадь = %d" % (area(3,5)))

p = perimetr(3.3, 5)          # функция может считать и дробные числа
print("Периметр = %f" % (p))  # напечатали p по формату %f (Периметр = 16.6)
s = area(3.3, 5)              # результат функции area поместили в переменную s
print("Площадь = %f" % (s))   # напечатали s по формату %f (Площадь = 16.5)

Возвращаем несколько значений

Функция может возвращать несколько значений. Их пишут через запятую (,)

Функции height передаем рост в сантиметрах, а возвращает функция рост в метрах и сантиметрах

def height(h):        # функция height, в нее передают одно число h
   m = h // 100       # подсчитали рост в метрах
   sm = h % 100       # подсчитали рост в сантиметрах
   return m, sm       # вернули сразу метры и сантиметры

# дальше программа. Пользуемся функцией height и проверяем ее.
                          # мой рост 169 см. Посчитаем его в метрах и сантиметрах
mym, mysm = height(169)   # результаты функции поместили в переменные mym и mysm 
print("мой рост %d метров %d сантиметров" % (mym, mysm))

you = int(input())        # прочитали ваш рост
ym, ysm = height(you)     # результаты функции поместили в переменные ym и ysm 
print("ваш рост %d метров %d сантиметров" % (ym, ysm))

Функция вызывает функцию

Напишем программу, которая по координатам 2 точек на плоскости считает расстояние между ними.

# -*- coding: utf-8 -*-
from math import sqrt

def length(x1, y1, x2, y2):       # создали функцию length
  dx = x1 - x2
  dy = y1 - y2
  res = sqrt(dx*dx + dy*dy)
  return res
  
x1, y1, x2, y2 = map(int, input().split()) # прочитали сразу много чисел из 1 строки

dist = length(x1, y1, x2, y2)     # результат работы функции length записали в dist
print(dist)

Функция length(x1, y1, x2, y2) считает расстояние между 2 точками на плоскости.

Теперь напишем другую программу. Которая по координатам 3 точек на плоскости считает площадь треугольника по формуле Герона.

Нужно писать мало кода. Возьмем старую функцию length и используем ее.

# -*- coding: utf-8 -*-
from math import sqrt

def length(x1, y1, x2, y2):         # функция length уже написана и проверена
  dx = x1 - x2
  dy = y1 - y2
  res = sqrt(dx*dx + dy*dy)         # из функции length вызываем функцию sqrt
  return res
  
def area3(x1, y1, x2, y2, x3, y3):  # новая функция area3
  a = length(x1, y1, x2, y2)        # из функции area3 вызываем функцию length
  b = length(x1, y1, x3, y3)        # из функции area3 вызываем функцию length
  c = length(x3, y3, x2, y2)        # из функции area3 вызываем функцию length
  p = (a+b+c)/2                     # записываем формулы
  res = sqrt(p*(p-a)*(p-b)*(p-c))
  return res
  
x1, y1, x2, y2, x3, y3 = map(int, input().split()) 
s = area3(x1, y1, x2, y2, x3, y3)
print(s)

Не обязательные аргументы

Задача: написать функцию, которая считает расстояние до точки (x,y) на плоскости от начала координат (0,0)

Вариант 1. Самый плохой, потому что нужно писать много кода и отлаживать его. Можем ошибиться при написании формулы.

def length0(x, y):       # создали функцию length0
  res = sqrt(x*x + y*y)
  return res

Вариант 2. Лучше. Пишем еще одну функцию, которая использует функцию length

def length0(x, y):       # создали функцию length0
  return length(x, y, 0, 0)

Вариант 3. Хорошо. Не нужно писать новый код.

Когда пишем функцию length(x1, y1, x2, y2) записываем в x2 и y2 значения по умолчанию 0. Аргументы x2 и y2 стали не обязательными. Можно вызвать функцию без этих аргументов, а она будет работать так, будто их значение 0.

IDEA! Значение по умолчанию можно сделать любое. Не обязательно 0.

def length(x1, y1, x2=0, y2=0):       # создали функцию length
  dx = x1 - x2
  dy = y1 - y2
  res = sqrt(dx*dx + dy*dy)
  return res

Когда вызываем функцию length, можем передавать все параметры, а можем не передавать x2 и y2. Тогда их значение будет по умолчанию 0.

d = length(3, 4, 3, -4)     # расстояние между точками (3, 4) и (3, -4)
d = length(3, 4, 3)         # расстояние между точками (3, 4) и (3, 0)
d = length(3, 4)            # расстояние между точками (3, 4) и (0, 0)

Именованные аргументы

Мы передавали аргументы в функцию по их позиции.

d = length(3, 4, 3, -4)     # расстояние между точками (3, 4) и (3, -4)

И понимали, что -4 - это значение аргумента y2.

Можно передавать аргументы в функцию по имени аргумента.

d = length(3, 4, x2=5, y2=-4)     # расстояние между точками (3, 4) и (5, -4)
d = length(3, 4, y2=5, x2=-4)     # расстояние между точками (3, 4) и (-4, 5)
                                  # порядок вызова аргументов по имени НЕ важен
d = length(x1=3, x2=4, y1=5, y2=-4)     # расстояние между точками (3, 5) и (4, -4)
                                  # это тоже работает, потому что аргументы вызваны по имени и порядок не важен
d = length(3, y1=4, x2=5, y2=-4)  # расстояние между точками (3, 4) и (5, -4)
                                  # любой аргумент можно вызвать по имени
d = length(x1=3, 4, x2=3, y2=-4)  # ОШИБКА! сначала аргумент по имени, потом - нет.

IDEA! Если вызван аргумент по имени, все аргументы после него должны вызваться по имени

Проверить функцию

Напишем функцию вычисления периметра и проверим, что она правильная.

# -*- coding: utf-8 -*-

def perimetr(a, b):  # создали первую функцию perimetr, в нее передают два числа a и b
  res = (a+b)        # Ошибка! Забыли *2
  return res         # возвращает число

# Проверим функцию perimetr
print(perimetr(3,5)) # периметр должен быть равен 16

Программа напечатает 8. Мы посмотрим на perimetr(3,5) и посчитаем, что периметр должен равняться 16.

Нашли, что функция perimetr работает неправильно. Надо исправить.

И проверить еще раз.

Легче проверять, если печатать что посчитали и какое число должно быть.

print(perimetr(3,5), 16) # должно напечатать 16 и 16
print(perimetr(7,2), 18) # должно напечатать 18 и 18
print(perimetr(5,5), 25) # должно напечатать 25 и 25

Печатаются числа. Надо посмотреть, что числа одинаковые. Если числа разные - ошибка.

Можно заставить проверять компьютер. assert(выражение) - проверяет, правильное выражение или нет. Если правильное, то ничего не делает. Если неправильное, печатает где ошибка.

assert(perimetr(3,5)==16) # проверить, что perimetr(3,5) вернул 16
assert(perimetr(7,2)==18) # проверить, что perimetr(7,2) вернул 18
assert(perimetr(5,5)==25) # проверить, что perimetr(5,5) вернул 25

Если функция возвращает несколько значений, то их пишем в ( ) через ,

Функция msm из роста в сантиметрах (157) вычисляет рост в метрах (1) и сантиметрах (57). Возвращает метры и сантиметры (1, 57)

Напишем функцию и проверим ее.

def msm(h):
    m = h//100
    sm = h % 100
    return m, sm

print(msm(157), 1, 57)      # напечатает (1 57) 1 57 - можно проверить глазами
assert(msm(157))==(1, 57))  # программа сама проверит, что msm(157) вернет 1 и 57

Задача 4a. time2min(h,m)

На часах h часов m минут. Напишите функцию time2min(h,m), которая переводит часы и минуты в минуты с 0:00.

Проверьте функцию.

Cделать таблицу для проверки результатов.

Задача 4b. h, m = min2time(m)

Написать фукнцию h, m = min2time(m), которая из минут с начала суток (0:00) делает часы и минуты.

Проверьте функцию.

Cделать таблицу для проверки результатов.

Задача 4с. Приехал поезд

Поезд вышел в h1 часов m1 минут. Поезд ехал h2 часа m2 минут. Во сколько часов h и минут m прибыл поезд.

Использовать написанные функции time2min и min2time

Cделать таблицу для проверки результатов.

Задача 5. Время в пути

Поезд вышел в h1 часов m1 минут. Поезд приехал в h2 часа m2 минут. Сколько часов h и минут m ехал поезд, если ехал он не больше 24 часов?

Использовать написанные функции time2min и min2time

Cделать таблицу для проверки результатов.

if, else, elif

if условие :
    команды_ДА

if условие :
    команды_ДА
else :
    команды_НЕТ

if условие1 :
    команды1_ДА
elif условие2 :
    команды2_ДА
elif условие3 :
    команды3_ДА
...
else :
    команды_НЕТ

Пример if. Сколько лодок нужно?

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

Cделать таблицу для проверки результатов.

n = int(input()))
k = int(input()))

boat = n // k        # полных лодок

if n%k > 0 :         # остались люди
    boat = boat + 1  # нужна еще 1 неполная лодка

print(boat)

Пример if else - четное, нечетное

Дано число. Напечатать четное оно или нечетное.

x = int(input())

if x%2 == 0 :
    print("четное")
else :
    print("нечетное")

Пример if elif else - положительное, отрицательное, ноль

Дано число. Напечатать, оно < 0, > 0 или ноль.

x = int(input())

if x == 0 :
    print("0")
elif x > 0:
    print("< 0")
else :
    print("> 0")

Задача 6. min

Даны 2 числа. Напечатать меньшее из них.

Cделать таблицу для проверки результатов.

Задача 7. бег

В соревновании по бегу разные люди бегут разные дистанции.
Дети до 10 лет бегут 1 км.
Подростки до 16 лет бегут 3 км.
Старики старше 50 лет бегут 2 км.
Все остальные бегут 5 км.

Дан возраст человека. Напечатать сколько километров он должен бежать.

Cделать таблицу для проверки результатов.

Возраст км (ожидаю) напечатало
7 1  
10 3  
17 5  
15 5  
50 5  
70 2  
     

Логические операторы and, or, not

and

Проверить, что х принадлежит отрезку [5, 20].

if 5 <= x and x <= 20 :
    print("5 <= x <= 20")

and Да Нет
Да ДА нет
Нет нет нет

Сразу, одновременно.
Чтобы выпить чай, мне нужно сразу и вода, и пакетик чая.

IDEA! Пересечение множеств. Пересечение признаков.

or

Проверить, что х принадлежит (-∞, 5) U (20; ∞).

if x < 5 or 20 < x :
    print("до 5 или после 20")

or Да Нет
Да ДА ДА
Нет ДА нет

Хоть что-нибудь.
С чаем я хочу съесть конфету или печенье. Если есть конфета, то ем конфету. Если только печенье, то ем печенье. Если есть конфеты и печенье, то я ем и конфету, и печенье.

not

Не.

Один и тот же результат

if x < 5 or 20 < x :
    print("до 5 или после 20")

if not (5 <= x and x <= 20) :
    print("до 5 или после 20")

not
Да Нет
Нет ДА

Type boolean, True, False

Логические выражения, например x < 10, имеют тип boolean.

Тип boolean имеет два значения. True (да) и False (нет).

x = 5
print(x, type(x))         # 5 int
print(x<10, type(x<10))   # True boolean

Задача 8. Делится на 3 или 5, но не на 15

Дано число, напечатать YES, если оно делится на 3 или 5, но не на 15. Иначе напечатайте NO.

Cделать таблицу для проверки результатов.

Цикл while

while условие:
    команды

Пример while. Сколько пробежал за 4 дня?

Человек бегает каждый день.

В первый день он пробежал L метров. Каждый день он пробегает на k метров больше, чем в предыдущий. Сколько метров человек пробежал за 4 дня?

Сделаем таблицу в какой день day, сколько человек пробегал в этот день sday, и сколько он пробежал всего total.

# -*- coding: utf-8 -*-
L = int(input())      # пробежал в первый день
k = int(input())      # завтра пробежит на k метров больше

                      # Готовимся бегать
day = 0               # всего пробежал 0 дней
total = 0             # еще не бегал         
sday = L              # побежит в первый день L метров

                      # побежали
while day < 4:               # пока прошло меньше 4 дней
    total = total + sday     # к общему результату добавь сколько бегал сегодня
    day = day + 1            # день закончился   
    print("за day=%d дней пробежал total = %d" % (day, total))
                             # готовимся к завтрашнему дню
    sday = sday + k          # завтра пробежит на k больше
    print("sday = %d" % (sday))

                      # цикл закончился
print(total)          # после цикла (1 раз) напечатать сколько всего пробежал

Задача 9. Сколько дней бегал?

Человек бегает каждый день.

В первый день он пробежал L метров. Каждый день он пробегает на k метров больше, чем в предыдущий. Напечатать, за сколько дней он пробежит total метров.

Задача 10. Сколько пробежал?

Человек бегает каждый день. Он заболел. И каждый день пробегает на k метров меньше.

В первый день он пробежал L метров. Сколько метров он пробежит за n дней?.

Задача 11. Сколько пробежал?

Человек бегает каждый день. Он заболел. И каждый день пробегает на k метров меньше. Если в день он сможет пробежать <0, то он не бежит (то есть бежит 0 метров).

В первый день он пробежал L метров. Сколько дней будет бегать человек? Сколько за эти дни пробежит?

-- TatyanaDerbysheva - 05 Mar 2017