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

Функции, возвращающие значения

Функции с аргументами. Ничего не возвращают.

Мы использовали функции с аргументами. Например, функция sq(size, col) рисует квадрат со стороной size цветом col.

Пример 1. Рисуем квадрат sq(size, col)

import turtle

t = turtle.Turtle()
t.shape('turtle')
t.width(5)

def sq(size, col):
    t.color(col)
    for i in range(4):
        t.fd(size)
        t.lt(90)

# вызов функции
sq(200, 'blue')

turtle.done()

return - вернуть значение из функции. Из Цельсия в Фаренгейты

В математике функции не только получают аргументы, но и возвращают значения.

y = sin(x)   # функция синус, аргумент х, вернула значение (число)

Пример 2. Переводим из градусов Цельсия в градусы Фаренгейта

Чтобы что-то вернуть, используют специальное слово return. Функция farh(c) переводит из градусов Цельсия в градусы Фаренгейта.

Переводим по формуле (0 °C × 9/5) + 32 = 32 °F

#рисовать ничего не будем, черепаха не нужна

# функция принимает градусы Цельсия и возвращает градусы Фаренгейта
def farh(c):
    res = c * 9 / 5 + 32   # считаем результат
    return res             # возвращаем результат

# Напечатаем таблицу для перевода из градусов Цельсия в Фаренгейты от -50 до 50 с шагом 10 градусов Цельсия

cel = -50            # сначала -50 градусов Цельсия
while cel <= 50:     # пока градусы Цельсия не больше 50
    f = farh(cel)    # функция farh возвращает число, записываем его в переменную f
    print(cel, f)
    cel += 10        # увеличить градусы Цельсия

Запустим код

-50 -58.0
-40 -40.0
-30 -22.0
-20 -4.0
-10 14.0
0 32.0
10 50.0
20 68.0
30 86.0
40 104.0
50 122.0

Задача 3. Градусы Цельсия в Фаренгейты

Перепишите код программы. Запустите его.

Измените программу так, чтобы она читала 1 число (градусы Цельсия) и печатала сколько это градусов по Фаренгейту.

Пример 4. Рисуем часть круга

Нарисуем график функции отрезками. Будем изменять x и вычислять y. Для вычисления y будем использовать функцию. Назовем ее func.

Уравнение, которое описывает окружность радиусом R с центром в точке (0,0):

x*x + y*y = R*R

Выразим y через x

y = sqrt(R*R - x*x)

Должно быть x ≤ R, так как корень из отрицательного числа нельзя вычислить.

import turtle
import math

t = turtle.Turtle()
t.width(5)

# перемещаемся в точку (x,y), ничего не рисуем.
def moveto(x, y):
    t.pu()
    t.goto(x, y)
    t.pd()

# функция, которая вычисляет y по заданным x и r
# y*y + x*x = r*r     =>   y = sqrt(r*r - x*x)
def func(r, x):
    y = math.sqrt(r*r - x*x)
    return y
    
def krug(r):
    dx = r / 20          # будем рисовать 20 отрезков
    x = r                # начинаем с x = r и идем к х = 0
    moveto(x, 0)         # встаем в начало рисования     
    t.color('blue')
    while x >= 0:
        y = func(r, x)   # вычисляем y по х
        t.goto(x, y)     # рисуем следующий отрезок
        x -= dx          # вычисляем следующую координату х
        
r = int(input())
krug(r)
turtle.done()

krug1.png

Задача 4a. Рисуем половину круга

Исправить пример так, чтобы рисовать половину круга радиуса r с центром в (0,0).

krug2.png

Задача 4b. Рисуем полный круг

Исправить пример так, чтобы рисовать круга радиуса r с центром в (0,0). Верхнюю половину рисовать синим, нижнюю красным.

krug3.png

Пример 5. Центр квадрата

Иногда нужно узнать какие числа или другие значения были у функции, когда она работала.

Тогда можно сказать функции, чтобы она ВЕРНУЛА ( return ) это нужное нам значение

Пусть черепаха стоит в точке (0,0) и смотрит на восток.

Надо нарисовать функцией sq(size) квадрат и вернуть точку (центр квадрата).

Потом поставить черепаху в эту точку.

sq0.png

import turtle           
import time

def write(data):
    t.write(data, font=("Arial", 14, "normal"))
    
def moveto(p):
    t.pu()
    t.goto(p)
    t.pd()

    write(p)
    t.dot(10)

def sq(size, col):
    t.color(col)
                      # нарисуем квадрат
    for i in range(4):
        t.fd(size)
        t.left(90)

                      # вычислим координаты середины
    xc = size/2
    yc = size/2
    centr = (xc, yc)  # запомним точку центра
    return centr      # ВЕРНЕМ ЗНАЧЕНИЕ центр


t = turtle.Turtle()
t.shape("turtle")
t.width(3)
pc = sq(100, "blue")    # Нарисуем квадрат и получим точку центра pc
                        # вычислять ее больше не нужно
                        # pc вычисляет функция sq
t.color('red')
moveto(pc)              # поставим черепаху на этот центр
write(pc)

turtle.done()

Задача 6. Центр квадрата

Программа работает хорошо, если черепаха в начале стоит в точке (0,0).

Функция неправильно вычисляет центр квадрата, если мы начинаем не из позиции (0,0).

Исправьте функцию, чтобы она могла вычислять центр квадрата, который рисуют из любой точки. Направление черепах - на восток.

Чтобы получить x и y координаты черепахи используют функции

x = t.xcor()   # получить координату х
y = t.ycor()   # получить координату y
t.write((x,y)) # написать координаты точки. НУЖНЫ СКОБКИ.

Задача 7. Центр круга

Функция t.circle(radius) рисует окружность радиусом radius из той точки, где стоит черепаха.

Черепаха смотрит на восток.

Напишите функцию krug(r), которая рисует окружность радиусом r и ВОЗВРАЩАЕТ точку центра окружности.

Поставьте туда черепаху.

Функция используется так:

p = krug(150, 'blue')
moveto(p)
write(p)

Пример 8. Середина квадрата - когда с математикой плохо

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

import turtle           
import time

def write(data):
    t.write(data, font=("Arial", 14, "normal"))
    
def moveto(p):
    t.pu()
    t.goto(p)
    t.pd()

    write(p)
    t.dot(10)

def sq(size, col):
    t.color(col)
                      # нарисуем квадрат
    for i in range(4):
        t.fd(size)
        t.left(90)

    p0 = t.pos()      # запомним, где стояли
    t.pu()
                      # пойдем в середину квадрата
    t.fd(size/2)
    t.lt(90)
    t.fd(size/2)
    t.rt(90)
    
    centr = t.pos()   # ЗАПОМНИМ точку центра
    t.goto(p0)        # вернемся в начальную точку
    return centr      # ВЕРНЕМ ЗНАЧЕНИЕ центр


t = turtle.Turtle()
t.shape("turtle")
t.width(3)
pc = sq(100, "blue")    # Нарисуем квадрат и получим точку центра pc
                        # вычислять ее больше не нужно
                        # pc вычисляет функция sq
t.color('red')
moveto(pc)              # поставим черепаху на этот центр
write(pc)

turtle.done()

Пример 9. Точка и линия

Напишем функции.

Надо:

Вводим числа:

-200 0 
100 150
-200 150

Нарисовали так:

import turtle           

def write(data):
    t.write(data, font=("*Sans", 14, "normal"))
    
def coord():
    write(t.pos())

def moveto(x, y):
    t.pu()
    t.goto((x, y))
    t.pd()

    write((x, y))
    t.dot(10)

def line(x1, y1, x2, y2):
    t.pu()
    t.goto((x1, y1))
    t.pd()

    write((x1, y1))
    t.goto((x2, y2))
    write((x2, y2))

t = turtle.Turtle()
t.shape('turtle')
t.width(3)

x1, y1 = map(int, input().split())
x2, y2 = map(int, input().split())
x0, y0 = map(int, input().split())

t.color('blue')
line(x1, y1, x2, y2)

t.color('red')
moveto(x0, y0)

turtle.done()

Пример 10. Середина горизонтального отрезка

Даны x1 и x2. y = 0.

Функцией middle(x1, s2) нарисовать отрезок от x1 до x2, вернуть его середину.

Потом поставить туда черепаху.

seg0.png

Считаем, что x1 &lt x2. Длина отрезка d = x2-x1.

Середина отрезка xc = x1 + d/2. Можно подставить d и упростить выражение:

xc = x1 + d/2 = x1 + (x2-x1)/2 = (2*x1 + x2-x1) / 2 = (x1+x2)/2

Проверьте, работает ли формула, если x1 > x2.

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

import turtle           

def write(data):
    t.write(data, font=("Arial", 14, "normal"))
    
def moveto(p):
    t.pu()
    t.goto(p)
    t.pd()

def dot(p):
    moveto(p)
    t.dot(10)
    write(p)
    
def line(x1, y1, x2, y2):
    moveto((x1, y1))
    write((x1,y1))
    t.goto(x2, y2)
    write((x2, y2))

def middle(x1, x2):
    line(x1, 0, x2, 0)
    xc = (x1 + x2)/2  # вычислили значение х координаты центра xc
    centr = (xc, 0)   # точка centr с координатами центра отрезка
    return centr      # ВЕРНЕМ ЗНАЧЕНИЕ центр


t = turtle.Turtle()
t.shape('turtle')
t.width(3)
t.color('blue')
pc = middle(-100, 150)  # Нарисуем отрезок [-100, 150] и получим точку центра pc
                        # вычислять ее больше не нужно
                        # pc вычисляет функция middle
t.color('red')
dot(pc)                 # поставим точку на этот центр

turtle.done()

Измените программу так, чтобы она читала значения x1 и x2 с клавиатуры. Проверьте программу для разных значений x1 и x2.

Задача 11. Середина отрезка

Даны 2 точки. Нарисовать синий отрезок. Поставить красную черепаху на середину отрезка и написать ее координаты.

Input:

-200 0 
100 150

Задача 12. Середина прямоугольника

Даны левая верхняя (left top) и правая нижняя (right bottom) точки.

Нарисовать точки красным. Подписать их координаты.

Нарисовать прямоугольник синим.

Input:

-200 150 
100 0

Задача 13. Центр треугольника

Для правильного треугольника со стороной a радиус описанной окружности R и радиус вписанной окружности r есть формулы:

R = 2r

Написать функцию trC(size, color), которая рисует правильный треугольник и возвращает точку центра этого треугольника. Получить эту точку в программе и поставить туда черепаху.

Направление черепахи в центре может быть любое.

p = trC(300, 'blue')
moveto(p)

Задача 14. Вписанная окружность

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

В основной программе нарисовать вписанную окружность

r = trOk(300, 'blue')
t.circle(r)

Задача 8. Описанная окружность

Написать функцию def sq(size, color), которая рисует квадрат и возвращает радиус описанной окружности. После работы функции черепаха стоит в углу квадрата и повернута перпендикулярно диагонали.

В основной программе нарисовать описанную окружность

r = sq(300, 'blue')
t.circle(r)

Пример 15. Рисуем узор

Функция part(w, h) рисует часть узора, начиная с точки start и возвращает точку b6.

uzor1.png

import turtle
import math

t = turtle.Turtle()
t.width(5)

# перемещаемся в точку p, ничего не рисуем.
def movetop(p):
    t.pu()
    t.goto(p)
    t.pd()
    
# рисуем линию из точки p1 в точку p2    
def linep(p1, p2):
    movetop(p1)
    t.goto(p2)
    
def uzor1(w, h):
    dx = w/5
    t.pu()
    # нижний ряд
    b1 = t.pos()
    t.fd(dx)
    b2 = t.pos()
    t.fd(dx)
    b3 = t.pos()
    t.fd(dx)
    b4 = t.pos()
    t.fd(dx)
    b5 = t.pos()
    t.fd(dx)
    b6 = t.pos()
            
    t.lt(90)        # поворот наверх
    t.fd(h)
    t.lt(90)
    
    t6 = t.pos()    # верхний ряд
    t.fd(dx)
    t5 = t.pos()
    t.fd(dx)
    t4 = t.pos()
    t.fd(dx)
    t3 = t.pos()
    t.fd(dx)
    t2 = t.pos()
    t.fd(dx)
    t1 = t.pos()
    
    t.lt(90)        # поворот вниз
    t.fd(h)
    t.lt(90)
    
    t.pd()

    linep(b1, b2)    # нижний ряд
    linep(b3, b4)
    linep(b5, b6)

    linep(t1, t2)    # верхний ряд
    linep(t3, t4)
    linep(t5, t6)

    linep(b1, t3)    # ////
    linep(b2, t4)
    linep(b3, t5)
    linep(b4, t6)

    linep(t1, b3)    # \\\\
    linep(t2, b4)
    linep(t3, b5)
    linep(t4, b6)
    
    return b6
    
def dummy(w, h):
    t.fd(w)
    p = t.pos()
    t.lt(90)
    t.fd(h)
    t.lt(90)
    t.fd(w)
    t.lt(90)
    t.fd(h)
    t.lt(90)
    return p

t.color('blue')
p = uzor1(200, 100)
t.color('red')
movetop(p)
p = uzor1(200, 100)

turtle.done()

Задача 16. Узор

С помощью функций, написанных в примере, нарисуйте такой узор:

-- TatyanaDerbysheva - 31 Mar 2020

Attachment sort Action Size Date Who Comment
krug1.png manage 1.3 K 01 Apr 2020 - 22:11 TatyanaDerbysheva четверть круга
krug2.png manage 2.2 K 01 Apr 2020 - 22:11 TatyanaDerbysheva полукруг
krug3.png manage 2.0 K 01 Apr 2020 - 22:12 TatyanaDerbysheva полный круг
uzor1.png manage 20.0 K 01 Apr 2020 - 22:12 TatyanaDerbysheva часть узора
uzor_rect.png manage 9.4 K 01 Apr 2020 - 22:13 TatyanaDerbysheva узор крестиком
sq0.png manage 1.2 K 02 Apr 2020 - 01:30 TatyanaDerbysheva квадрат
seg0.png manage 1.5 K 02 Apr 2020 - 01:31 TatyanaDerbysheva отрезок горизонтальный