0 / 0 / 0
Регистрация: 10.09.2017
Сообщений: 2

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

10.09.2017, 17:50. Показов 4576. Ответов 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
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
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
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru