Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 10.09.2017
Сообщений: 2

Калькулятор электрических значений, напряжение, сопротивление и т.д

10.09.2017, 17:50. Показов 4525. Ответов 5

Студворк — интернет-сервис помощи студентам
Калькулятор для нахождения напряжения, сопротивления, силы тока, мощности через известные значения. Подскажите пожалуйста, что здесь по вашему мнению похоже на "велосипед", как можно улучшить блоки кода для большей удобочитаемости? В общем предоставьте пожалуйста критику.
P.S Писалось для себя, было интересно научится переписывать математические и физические формулы, а также нужно было запомнить данные формулы.

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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
import math #импортирование модуля math
while True: #Запуск  бесконечного цикла
    
    print('\nДанная программа предназначена для расчета значений в электрических цепях') #Вывод инструкций
 
    action = input('''Введите то, что вам нужно найти:\nнапряжение - 1, сопротивление - 2, сила тока - 3, мощность - 4 ''') #Запрос для выбора действия
    
    def power(): #Функция для ввода значения мощности
        global power_W
        power_W = float(input('\nВведите мощность в Вт, W: '))
 
    def voltage(): #Функция для ввода значения напряжения
        global voltage_V
        voltage_V = float(input('\nВведите напряжение в В, V: '))
 
    def resistance(): #Функция для ввода значения сопротивления
        global resistance_Om
        resistance_Om = float(input('\nВведите сопротивление в Om: '))
            
    def amperage(): #Функция для ввода значения силы тока
        global amperage_A
        amperage_A = float(input('\nВведите силу тока в А: '))
 
    def error(): #Функция вывода сообщения об ошибке
        print('''\nК сожалению вы ввели неверные символы, пожалуйста, повторите снова.
            Дробные числа вводятся через точку, а не запятую.
            Буквы не вводятся, кроме тех мест где это предусмотрено\n''') #Исключение ошибки ValueError
 
    def voltage_out(): #Функция вывода значения напряжения
        print('Напряжение = ',voltage, 'В')
 
    def resistance_out(): #Функция вывода значения сопротивления
        print('Сопротивление = ',resistance, 'Om')
 
    def amperage_out(): #Функция вывода значения силы тока
        print('Сила тока = ',amperage, 'A')
 
    def power_out(): #Функция вывода значения мощности
        print('Мощность = ', power, 'W')
 
    def action_error():
        print('Действие введено не верно, повторите...\n')
 
    if action == 'напряжение' or action == '1': #Проверка введенного действия в переменную action
        action_voltage = input('''Найти напряжение через:\nСопротивление и силу тока - 1.1, мощность и сопротивление - 1.2, мощность и силу тока - 1.3: ''')
        
        if action_voltage == 'сопротивление и силу тока' or action_voltage == '1.1': #Проверка введенного действия в переменную action_voltage
            try:
                resistance() #Вызов функции resistance()
                amperage() #Вызов функции amperage()
            except ValueError:
                error() #Вызов функции error()
                continue
            voltage = resistance_Om * amperage_A #Формула В = Ом * А
            voltage_out()
 
        elif action_voltage == 'мощность и силу тока' or action_voltage == '1.2':
            try:
                power()
                amperage()
            except ValueError:
                error()
                continue
            voltage = power_W / amperage_A 
            voltage_out()
            
        elif action_voltage == 'мощность и сопротивление' or action_voltage == '1.3':
            try:
                power()
                resistance()
                voltage = math.sqrt(power_W * resistance_Om)
                voltage_out()
            except ValueError:
                error()
                continue
            
        else:
            action_error() #Действие, если выбор действия был выполнен с ошибкой
            
    elif action == 'Сопротивление' or action == '2':
        action_resistance = input('''Найти сопротивление через:\nНапряжение и силу тока - 2.1, напряжение и мощность - 2.2, мощность и силу тока - 2.3: ''')
 
        if action_resistance == 'напряжение и силу тока' or action_resistance == '2.1':
            try:
                voltage()
                amperage()
                resistance = voltage_V / amperage_A
                resistance_out()
            except ValueError:
                error()
            
        elif action_resistance == 'напряжение и мощность' or action_resistance == '2.2':
            try:
                voltage()
                power()
                resistance = (voltage_V ** 2) / power_W
                resistance_out()
            except ValueError:
                error()
                
        elif action_resistance == 'мощность и силу тока' or action_resistance == '2.3':
            try:
                power()
                amperage()
                resistance = power_W / (amperage_A ** 2)
                resistance_out()
            except ValueError:
                error()
 
        else:
            action_error()
                
    elif action == 'сила тока' or action == '3':
        action_amperage = input('''Найти силу тока через:\nНапряжение и сопротивление - 3.1, мощность и напряжение - 3.2, мощность и сопротивление - 3.3: ''')
 
        if action_amperage == 'напряжение и сопротивление' or action_amperage == '3.1':
            try:
                voltage()
                resistance()
                amperage = voltage_V / resistance_Om
                amperage_out()
            except ValueError:
                error()
 
        elif action_amperage == 'мощность и напряжение' or action_amperage == '3.2':
            try:
                power()
                voltage()
                amperage = power_W / voltage_V
                amperage_out()
            except ValueError:
                error()
 
        elif action_amperage == 'мощность и сопротивление' or action_amperage == '3.3':
            try:
                power()
                resistance()
                amperage = math.sqrt(power_W / resistance_Om)
                amperage_out()
            except ValueError:
                error()
        else:
            action_error()
 
    elif action == 'мощность' or action == '4':
        action_power = input('''Найти мощность через:\nНапряжение и силу тока - 4.1, сопротивление и силу тока - 4.2, напряжение и сопротивление - 4.3: ''')
        if action_power == 'напряжение и силу тока' or action_power == '4.1':
            try:
                voltage()
                amperage()
                power = voltage_V * amperage_A
                power_out()
            except ValueError:
                error()
 
        elif action_power == 'сопротивление и силу тока' or action_power == '4.2':
            try:
                resistance()
                amperage()
                power = resistance_Om * (amperage_A ** 2)
                power_out()
            except ValueError:
                error()
        elif action_power == 'напряжение и сопротивление' or action_power == '4.3':
            voltage()
            resistance()
            power = (voltage_V ** 2) / resistance_Om
            power_out()
            
        else:
            action_error()
            
    else:
        action_error()
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.09.2017, 17:50
Ответы с готовыми решениями:

Датчик температуры - сопротивление в напряжение
Здравствуйте товарищи ))) Нашел завалявшийся датчик температуры, шедший в комплекте с китайским мультиметром. Обозначение его - TP-01, в...

Расчет преобразователя сопротивление-напряжение с ТС в ОС
Привет всем! Помогите пожалуйста разобратся с расчетом преобразователя сопротивление-напряжение с ТС в ОС. У меня получилось...

Сопротивление и сила тока и напряжение
Доброго времени суток! При увеличении сопротивления, уменьшается сила тока или напряжение уменьшается? Или то и это? Заранее благодарен....

5
 Аватар для Delvin-fil
35 / 33 / 19
Регистрация: 22.01.2015
Сообщений: 215
10.09.2017, 21:17
Делал подобное на Delphi.
Если все это сделать на PyQt, будет, наверное, красиво. IMHO
1
 Аватар для Semen-Semenich
5228 / 3474 / 1174
Регистрация: 21.03.2016
Сообщений: 8,301
11.09.2017, 20:08
Лучший ответ Сообщение было отмечено VictorPP как решение

Решение

зачем писать отдельную функцию для вывода одного значения? на то она и функция передавайте параметром разные значения и пусть одна функция их выводит
опять же зачем такое условие
Python
1
if action_amperage == 'напряжение и сопротивление' or action_amperage == '3.1'
если в подсказке явно указано что вводить надо дробное число но не текст 'напряжение и сопротивление' вообщем свой вариант со словарями без условий
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
import math 
 
def error():
    print(
        '''\n\t К сожалению вы ввели неверные символы, пожалуйста, повторите снова.
                Дробные числа вводятся через точку, а не запятую.
                Буквы не вводятся, кроме тех мест где это предусмотрено\n'''
           )
 
def option(text,data):
    x = input('{}\n --->> '.format(text))
    while x not in data:
        error()
        x = input('{}\n --->> '.format(text))
    return x,data[x]
 
def calc(key,option):
    list_val = []
    for x in option:
        flag = 1
        while flag:
            try:
                list_val.append(float(input('значение {}- '.format(x))))
                flag = 0
            except:
               error()
               
    x,y =  list_val                            
    formula = {'1.1' : x*y,'1.2' : x * y, '1.3' : math.sqrt(x/y), # словарь формул в зависимости от выбора подменю
                    '2.1' : x/y, '2.2' : x**2/y, '2.3' : x/y**2,
                    '3.1' : x/y, '3.2' : x/y, '3.3' : math.sqrt(x/y),
                    '4.1' : x*y, '4.2' : x*y**2, '4.3' : x**2/y
                    }
    return formula[key]
    
print('Данная программа предназначена для расчета значений в электрических цепях\n')
# кортеж информации ввода (вывода принта)
lead_in =('напряжение (В)','сопротивление (Ом)','ток (А)','мощность (Ватт)')
# основное меню выбора
request = '''
Введите то, что вам нужно найти:
напряжение - 1, сопротивление - 2, сила тока - 3, мощность - 4'''
# подменю выбора действий
manipulation ={
'1' : ''' Найти напряжение через:
сопротивление и силу тока - 1.1,мощность и сопротивление - 1.2, мощность и силу тока - 1.3''',
'2' : '''Найти сопротивление через:
Напряжение и силу тока - 2.1, напряжение и мощность - 2.2, мощность и силу тока - 2.3''',
'3' : '''Найти силу тока через:
Напряжение и сопротивление - 3.1, мощность и напряжение - 3.2, мощность и сопротивление - 3.3''',
'4' :'''Найти мощность через:
Напряжение и силу тока - 4.1, сопротивление и силу тока - 4.2, напряжение и сопротивление - 4.3: '''
}
# словарь где ключ-значения подменю выбора действий а значение-кортеж информационной строки ввода
information = {
'1.1' : (lead_in[1],lead_in[2]), '1.2' : (lead_in[3],lead_in[1]), '1.3' : (lead_in[3],lead_in[2]),
'2.1' : (lead_in[0],lead_in[3]), '2.2' : (lead_in[0],lead_in[3]), '2.3' : (lead_in[3],lead_in[2]),
'3.1' : (lead_in[0],lead_in[1]), '3.2' : (lead_in[3],lead_in[0]), '3.3' : (lead_in[3],lead_in[1]),
'4.1' : (lead_in[0],lead_in[2]), '4.2' : (lead_in[1],lead_in[2]), '4.3' : (lead_in[0],lead_in[1])
}
 
flag = '1'
while flag == '1':
    key,a = option(request,manipulation)# key = значению основного выбора, а = текст подменю выбора действий
    print('{} = {}'.format(lead_in[int(key)-1],calc(*option(a,information))))
    flag =input('продолжить - 1, выйти - 0 : ввод--> ')
формулы взяты с вашего кода так что за их правильность не ручаюсь

Добавлено через 11 минут
в 57 строке ошибка с индексом должно быть '2.1' : (lead_in[0],lead_in[2])
2
 Аватар для Delvin-fil
35 / 33 / 19
Регистрация: 22.01.2015
Сообщений: 215
12.09.2017, 02:56
Мощно, уважаемый! Блин, я в те времена НЕ ЧИТАЛ книг, до ООП не дошел. МОЩНО! И красиво.
0
 Аватар для Semen-Semenich
5228 / 3474 / 1174
Регистрация: 21.03.2016
Сообщений: 8,301
12.09.2017, 07:22
Delvin-fil, тут ООП и не пахнет просто использовал пару словарей вместо кучи if-elif-else
0
0 / 0 / 0
Регистрация: 10.09.2017
Сообщений: 2
12.09.2017, 16:47  [ТС]
Большое спасибо, теперь буду знать как можно сделать лучше)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.09.2017, 16:47
Помогаю со студенческими работами здесь

Как изменить сопротивление, изменяя напряжение?
Я тут собираю одну модельку...так вот мне надо изменить сопротивление переменного резистора, изменяя напряжение, подаваемое извне системы. ...

Найти входное сопротивление цепи и напряжение катушки
Сопротивления всех элементов равны 2 Ом. Входное напряжение 10 В. Не могу разобраться как сложить сопротивления ризистора 2 и...

Рассчитать преобразователь сопротивление-напряжение с измерительным мостом
Помогите, пожалуйста, решить задание. Исходными данными для расчета преобразователя являются: 1. Диапазон измеряемой температуры Тмин=...

Определить эквивалентное сопротивление, ток и напряжение на каждом резисторе
Круг постоянного тока состоит из нескольких резисторов, 3ьеднаних смешано. Определить эквивалентное сопротивление, ток и напряжение на...

Определить эквивалентное сопротивление, ток и напряжение на каждом резисторе
Круг постоянного тока состоит из нескольких резисторов, соединенных смешанно. Определить эквивалентное сопротивление цепи, силу тока и...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru