Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
24 / 19 / 8
Регистрация: 21.04.2019
Сообщений: 494

Почему не работает инкремент счетчика k+=1

18.02.2021, 16:05. Показов 5548. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не работает счетчик. При обнаружении точки внутри окружности, счетчик должен увеличиваться в методе k+=1, но на выводе выдает 0.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from math import pow,sqrt
 
 
def fff(r,x1,y1,q1,q2,k1):
    if (pow((q1-x1),2) + pow((q2-y1),2) <= pow(r,2)):
        print('Точка внутри окружности')
        k1+=1
        print(k1)
 
 
    else:
        print('Точка вне окружности')
 
k=0
 
print('Введите координаты центра окружности: ')
a=int(input())
b=int(input())
 
print('Введите координаты точки, лежащей на окружности: ')
x=int(input())
y=int(input())
r=sqrt(pow((x-a),2)+pow((y-b),2))
 
print('Введите координаты точки P: ')
x1=int(input())
y1=int(input())
fff(r, a, b, x1, y1, k)
 
print('Введите координаты точки F: ')
x1=int(input())
y1=int(input())
fff(r, a, b, x1, y1, k)
 
print('Введите координаты точки L: ')
x1=int(input())
y1=int(input())
fff(r, a, b, x1, y1, k)
 
 
print('Из трех точек внутри окружности лежат ', k)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.02.2021, 16:05
Ответы с готовыми решениями:

[mcs-51] Инкремент счетчика нажатий кнопки SW15, и декремент счетчика при нажатии кнопки SW16
Реализовать программу, которая при нажатии кнопки SW15 добавляет их каждое нажатие ((Lich) = (Lich) +1), а при нажатии кнопки SW16...

Почему постфиксный инкремент так работает?
Почему выводит 4 , а не 3, если постфиксный имеет низкий приоритет? public void Method() { int k = 1; Console.WriteLine(k++...

Почему не работает инкремент в многопоточном коде?
Имеем такой код, который вызывает два потока, в асинхронном режиме, которые изменяют одну переменную, которая передаётся по ссылке. ...

21
 Аватар для oldnick85
36 / 34 / 10
Регистрация: 15.07.2017
Сообщений: 128
23.02.2021, 16:19
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Viktorrus Посмотреть сообщение
Если Вы выложите пример кода, то интересно было бы посмотреть.
Цитата Сообщение от Arsegg Посмотреть сообщение
Присоединяюсь. Интересно посмотреть на итоговый результат.
Ну вот то, что реализовал Viktorrus:
Python
1
2
3
4
5
6
7
class Test:
    def __new__(cls, attr):
        return type("Test", (), attr)
 
lst_1 = {'a': 0, 'b': 0, 'x': 5, 'y': 0, 'px': 1, 'py': 2}
d = Test(lst_1)
print(d.a, d.b, d.x, d.y, d.px, d.py)
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
07.03.2021, 13:34
Олег1000, Ради интереса, решил уточнить условие Вашей задачи, усложнив ее.
Посчитаем количество точек, только тех, которые находятся внутри круга и не имеют совпадающих координат. То есть реальное количество точек находящихся внутри круга.
Конечно можно написать код и без использования классов. Но здесь показана технология увеличивающая скорость работы программы, когда функция должна использоваться многократно и с разными наборами аргументов. Мы можем сэкономить время не запуская функцию с совпадающими наборами аргументов, а беря ранее посчитанное значение из словаря. Это особенно эффективно, когда работа функции (например при сложных вычислениях для получения результатов в экспериментах) занимает много времени.
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
"""
Использование класса глобальных переменных GV 
    исключает возможность возникновения конфликта имен.
Использование класса функций Func 
    позволяет исключить затратные повторные запуски функций
    и при этом не допустить возникновение ошибок, 
    которые могут возникать при использовании глобальных переменных
    для хранения результатов работы функций
"""
 
from math import pow,sqrt
 
class GV():        # класс "Глобальная переменная" (Global Variable)
    def __init__(self, v):
        self.v = v          # значение глобальной переменной
    
# создаем необходимое количество экземпляров глобальных переменных.
 
k = GV(0)
 
class Func:
    def __init__(self, func):
        self.func = func
        self.args = ()
        self.dic_res = {}            # словарь результатов для разных наборов аргументов
        self.res = None              # последний полученный результат
    def call_up(self, *args):
        self.args = args
        if self.args in self.dic_res:
            self.res = self.dic_res[self.args]
        else:
            self.res = fff(*self.args)
            self.dic_res[self.args] = self.res
 
 
def fff(r,x0,y0,x,y):
    if (pow((x-x0),2) + pow((y-y0),2) <= pow(r,2)):
        k.v += 1
        #print(k.v)
        print('Точка внутри окружности')
        return True
    else:
        print('Точка вне окружности')
        return False
 
if __name__ == '__main__':
 
    fff_F = Func(fff)
 
    print('Координаты центра окружности')
    x0 = 0
    y0 = 0
    print(x0, y0)
 
    print('Координаты точки, лежащей на окружности')
    x = 4
    y = 0
    r=sqrt(pow((x-x0),2)+pow((y-y0),2))
    print(x, y)
 
    print('Координаты точки P')
    x1 = 2
    y1 = 1
    print(x1, y1)
    fff_F.call_up(r, x0, y0, x1, y1)
    print(fff_F.res)
    #print(fff_F.args, fff_F.dic_res, fff_F.res)   # строка для тестирования
 
 
    print('Координаты точки F')
    x2 = 1
    y2 = 3
    print(x2, y2)
    fff_F.call_up(r, x0, y0, x2, y2)
    print(fff_F.res)
    #print(fff_F.args, fff_F.dic_res, fff_F.res)   # строка для тестирования
 
    print('Координаты точки L')
    x3 = 3
    y3 = 5
    print(x3, y3)
    fff_F.call_up(r, x0, y0, x3, y3)
    print(fff_F.res)
    #print(fff_F.args, fff_F.dic_res, fff_F.res)   # строка для тестирования
 
    print('Координаты точки M')
    x4 = 1
    y4 = 3
    print(x4, y4)
    fff_F.call_up(r, x0, y0, x4, y4)
    print(fff_F.res)
    #print(fff_F.args, fff_F.dic_res, fff_F.res)   # строка для тестирования
 
    print('Количество точек внутри окружности', k.v)

Выводит, что реально в круге две точки, так как точка M имеет совпадающие координаты с точкой F (то есть это совпадающая точка), и поэтому она в подсчете не учитывается:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Координаты центра окружности
0 0
Координаты точки, лежащей на окружности
4 0
Координаты точки P
2 1
Точка внутри окружности
True
Координаты точки F
1 3
Точка внутри окружности
True
Координаты точки L
3 5
Точка вне окружности
False
Координаты точки M
1 3
True
Количество реальных точек внутри окружности 2
Добавлено через 9 минут
Олег1000, Забыл, я же еще хотел доработать, что бы вызов функции был более привычным.
В виде fff_F(r, x0, y0, x3, y3) .
Для этого нужно метод call_up заменить на метод перегрузки операторов __call__.
Но это надо еще проверить. Когда проверю, тогда выложу.

Добавлено через 23 минуты
Олег1000, Вот, использовал метод перегрузки __call__, все прекрасно работает. И вызов похож на вызов функции, так привычнее.
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
"""
Использование класса глобальных переменных GV 
    исключает возможность возникновения конфликта имен.
Использование класса функций Func 
    позволяет исключить затратные повторные запуски функций
    и при этом не допустить возникновение ошибок, 
    которые могут возникать при использовании глобальных переменных
    для хранения результатов работы функций
"""
 
from math import pow,sqrt
 
class GV():        # класс "Глобальная переменная" (Global Variable)
    def __init__(self, v):
        self.v = v          # значение глобальной переменной
    
# создаем необходимое количество экземпляров глобальных переменных.
 
k = GV(0)
 
class Func:
    def __init__(self, func):
        self.func = func
        self.args = ()
        self.dic_res = {}            # словарь результатов для разных наборов аргументов
        self.res = None              # последний полученный результат
    def __call__(self, *args):
        self.args = args
        if self.args in self.dic_res:
            self.res = self.dic_res[self.args]
        else:
            self.res = fff(*self.args)
            self.dic_res[self.args] = self.res
 
 
def fff(r,x0,y0,x,y):
    if (pow((x-x0),2) + pow((y-y0),2) <= pow(r,2)):
        k.v += 1
        #print(k.v)
        print('Точка внутри окружности')
        return True
    else:
        print('Точка вне окружности')
        return False
 
if __name__ == '__main__':
 
    fff_F = Func(fff)
 
    print('Координаты центра окружности')
    x0 = 0
    y0 = 0
    print(x0, y0)
 
    print('Координаты точки, лежащей на окружности')
    x = 4
    y = 0
    r=sqrt(pow((x-x0),2)+pow((y-y0),2))
    print(x, y)
 
    print('Координаты точки P')
    x1 = 2
    y1 = 1
    print(x1, y1)
    fff_F(r, x0, y0, x1, y1)
    print(fff_F.res)
    #print(fff_F.args, fff_F.dic_res, fff_F.res)   # строка для тестирования
 
 
    print('Координаты точки F')
    x2 = 1
    y2 = 3
    print(x2, y2)
    fff_F(r, x0, y0, x2, y2)
    print(fff_F.res)
    #print(fff_F.args, fff_F.dic_res, fff_F.res)   # строка для тестирования
 
    print('Координаты точки L')
    x3 = 3
    y3 = 5
    print(x3, y3)
    fff_F(r, x0, y0, x3, y3)
    print(fff_F.res)
    #print(fff_F.args, fff_F.dic_res, fff_F.res)   # строка для тестирования
 
    print('Координаты точки M')
    x4 = 1
    y4 = 3
    print(x4, y4)
    fff_F(r, x0, y0, x4, y4)
    print(fff_F.res)
    #print(fff_F.args, fff_F.dic_res, fff_F.res)   # строка для тестирования
 
    print('Количество реальных точек внутри окружности', k.v)

Вот только, чтобы получить результат (в любом месте, без повторного вызова функции), нужно использовать строку
fff_F.res

Добавлено через 9 минут
Если же Вы хотите получить не просто результат последнего обращения к функции из какого либо места, а результат с конкретным набором аргументов, то нужно использовать две строки
Python
1
2
    fff_F(r, x0, y0, x4, y4)
    print(fff_F.res)
Но в отличие от обычной функции, если функция уже вычислялась с таким набором аргументов, то она уже повторно вычисляться не будет, а просто возьмет результат из словаря.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.03.2021, 13:34
Помогаю со студенческими работами здесь

Из с++ в java. Инкремент общего счетчика из разных потоков.
Кто-нибудь сможет помочь и переписать исходный код с++ на java? Возникают кое-какие проблемы в понимании вообще того, что происходит, и...

Инкремент общего счетчика. Добавить вывод в каждом потоке
Всем привет! Помогите, пожалуйста, переделать программу под условие задания, буду рада любой помощи! Количество потоков – 4 Функция...

Инкремент счетчика в определенном интервале при каждом обновлении
Кто мне подскажет как мне получить в JavaScripte например взял 1до 500 цифры и кажды раз я буду обнавлять будет +1 например обнавил 2...

Инкремент общего счетчика. Переделать, чтобы потоки продолжали работу
Всем привет! Помогите, пожалуйста, переделать программу под условие задания, буду рада любой помощи! Количество потоков – 4 Функция...

Почему не срабатывает инкремент?
В комментарии показал вывод программы. Все переменные почему равны 2 Получается инкремент не оказывает никакого влияния? int a=0,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru