Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 04.09.2017
Сообщений: 16

Код-ревью

04.09.2017, 18:43. Показов 1641. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здрасте, можете посмотреть на мою программку и рассказать как можно сделать лучше и легче?
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
import random
 
leftz = random.randint(1,100)
rightz = random.randint(1,100)
ran = random.randint(0,3)
ran= int(ran)
plus = leftz + rightz
minus = leftz - rightz
umn = leftz * rightz
dele = leftz / rightz
 
if  ran == 0 :
    print('{} + {}'.format(leftz,rightz))
    vvod = int(input('Введи ответ'))
 
    if plus == vvod:
        print('Ответ = {}'.format(plus))
    else:
        print('Не правильно',plus)
 
elif ran == 1:
    print('{} - {}'.format(leftz,rightz))
    vvod = int(input('Введи ответ'))
 
    if minus == vvod:
        print('Ответ = {}'.format(minus))
    else:
        print('Не правильно',minus)
 
elif ran == 2:
    print('{} * {}'.format(leftz,rightz))
    vvod = int(input('Введи ответ'))
 
    if umn == vvod:
        print('Ответ = {}'.format(umn))
    else:
        print('Не правильно',umn)
 
elif ran == 3:
    print('{} / {}'.format(leftz,rightz))
    vvod = int(input('Введи ответ'))
 
    if minus == vvod:
        print('Ответ = {}'.format(dele))
    else:
        print('Не правильно',dele)
 
else:
    print('Не правильно!!!')
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.09.2017, 18:43
Ответы с готовыми решениями:

Код-ревью
Добрый день! Я написал небольшой парсер вакансий для hh.ru. Буду благодарен, если поможете прояснить несколько вопросов по коду: ...

Код ревью python кода
Всем привет, хотелось бы, чтобы кто-нибудь посмотрел на мой код(и комментарии к коммитам) и покритиковал. Ссылка на репозиторий:...

Код-ревью. Игра блек джек
Здравствуйте. Изучаю Python как первый язык программирования. Задание: Написать игру Блэк Джек. Попинайте что реализовано не...

19
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
04.09.2017, 21:46
Цитата Сообщение от Pain123 Посмотреть сообщение
как можно сделать лучше
переписать ее осмысленно!
для начала зачем
Python
1
2
ran = random.randint(0,3)
ran= int(ran)
переводить в тип инт если изначально это уже число ну а дальше откуда я узнаю какое из четырех действий мне предстоит вычислить?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import random
 
def result(number_1, number_2):
    operation = random.choice( ['+','-','*','/'] )
    print('{} {} {}'.format(number_1, operation, number_2))
    if operation == '+':
        res = number_1 + number_2
    elif operation == '-':
        res = number_1 - number_2
    elif operation == '*':
        res = number_1 * number_2
    else:
        res = number_1 / number_2
    if int(input('Введи ответ -> ')) == res:
        return 'Ответ = {}'.format(res)
    else:
        return 'Не правильно! {}'.format(res)
 
leftz = random.randint(1,100)
rightz = random.randint(1,100)
print(result (leftz, rightz))
0
0 / 0 / 0
Регистрация: 04.09.2017
Сообщений: 16
05.09.2017, 11:33  [ТС]
Спасибо, этого я и хотел.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.09.2017, 12:20
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import random
 
operations = \
{
  '+': lambda a,b: a+b, 
  '-': lambda a,b: a-b,
  '*': lambda a,b: a*b,
  '/': lambda a,b: a/b
}
 
 
def result(a, b):
  operation = random.choice( ['+','-','*','/'] )
  print('{} {} {}'.format(a, operation, b))
  res =  operations[operation](a,b)
  if int(input('Введи ответ -> ')) == res:
     return 'Ответ = {}'.format(res)
  else:
     return 'Не правильно! {}'.format(res)
 
leftz = random.randint(1,100)
rightz = random.randint(1,100)
print(result (leftz, rightz))
1
0 / 0 / 0
Регистрация: 04.09.2017
Сообщений: 16
05.09.2017, 14:28  [ТС]
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
import random
 
L1 = random.randint(0,24)
R1 = random.randint(0,24)
 
L2 = random.randint(25,49)
R2 = random.randint(25,49)
 
L3 = random.randint(50,74)
R3 = random.randint(50,74)
 
L4 = random.randint(75,101)
R4 = random.randint(75,101)
 
slog = int(input('Введи уровень сложности от 1 до 4 - '))
 
def vebor1():
    if slog == 1:
        oper1()
 
def vebor2():
    if slog == 2:
        oper2()
 
def vebor3():
    if slog == 3:
        oper3()
 
def vebor4():
    if slog == 4:
        oper4()
 
def oper1(LL1,RR1):
    operation = random.choice(['+', '-', '*', '/'])
    print('{} {} {}'.format(LL1, operation, RR1))
    if operation == '+':
        res = LL1 + RR1
    elif operation == '-':
        res = LL1 - RR1
    elif operation == '*':
        res = LL1 * RR1
    else:
        res = LL1 / RR1
    if int(input('Введи ответ -> ')) == res:
        return 'Ответ = {}'.format(res)
    else:
        return 'Не правильно! {}'.format(res)
 
def oper2(LL2,RR2):
    operation = random.choice(['+', '-', '*', '/'])
    print('{} {} {}'.format(LL2, operation, RR2))
    if operation == '+':
        res = LL2 + RR2
    elif operation == '-':
        res = LL2 - RR2
    elif operation == '*':
        res = LL2 * RR2
    else:
        res = LL2 / RR2
    if int(input('Введи ответ -> ')) == res:
        return 'Ответ = {}'.format(res)
    else:
        return 'Не правильно! {}'.format(res)
 
def oper3(LL3,RR3):
    operation = random.choice(['+', '-', '*', '/'])
    print('{} {} {}'.format(LL3, operation, RR3))
    if operation == '+':
        res = LL3 + RR3
    elif operation == '-':
        res = LL3 - RR3
    elif operation == '*':
        res = LL3 * RR3
    else:
        res = LL3 / RR3
    if int(input('Введи ответ -> ')) == res:
        return 'Ответ = {}'.format(res)
    else:
        return 'Не правильно! {}'.format(res)
 
def oper4(LL4,RR4):
    operation = random.choice(['+', '-', '*', '/'])
    print('{} {} {}'.format(LL4, operation, RR4))
    if operation == '+':
        res = LL4 + RR4
    elif operation == '-':
        res = LL4 - RR4
    elif operation == '*':
        res = LL4 * RR4
    else:
        res = LL4 / RR4
    if int(input('Введи ответ -> ')) == res:
        return 'Ответ = {}'.format(res)
    else:
        return 'Не правильно! {}'.format(res)
 
if slog == 1:
    print(oper1(L1, R1))
elif slog == 2:
    print(oper1(L2, R2))
elif slog == 3:
    print(oper1(L3, R3))
elif slog == 4:
    print(oper1(L4, R4))
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
05.09.2017, 18:20
Pain123, почитайте про функции внимательней и ваш код будет состоять из одной функции. (пару примеров выше) и после написания кода выделите его и вверху окна сообщений выберите python тогда это будет читабельный код а не набор строк
1
0 / 0 / 0
Регистрация: 04.09.2017
Сообщений: 16
05.09.2017, 18:23  [ТС]
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
import random
 
L1 = random.randint(0,24)
R1 = random.randint(0,24)
 
L2 = random.randint(25,49)
R2 = random.randint(25,49)
 
L3 = random.randint(50,74)
R3 = random.randint(50,74)
 
L4 = random.randint(75,101)
R4 = random.randint(75,101)
 
slog = int(input('Введи уровень сложности от 1 до 4 - '))
 
def vebor1():
    if slog == 1:
        oper1()
    elif slog == 2 :
        oper1()
    elif slog == 3 :
        oper1()
    elif slog == 4:
        oper1()
 
def oper1(L,R):
    operation = random.choice(['+', '-', '*', '/'])
    print('{} {} {}'.format(L, operation, R))
    if operation == '+':
        res = L + R
    elif operation == '-':
        res = L - R
    elif operation == '*':
        res = L * R
    else:
        res = L / R
    if int(input('Введи ответ -> ')) == res:
        return 'Ответ = {}'.format(res)
    else:
        return 'Не правильно! {}'.format(res)
 
if slog == 1:
    print(oper1(L1, R1))
elif slog == 2:
    print(oper1(L2, R2))
elif slog == 3:
    print(oper1(L3, R3))
elif slog == 4:
    print(oper1(L4, R4))
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
05.09.2017, 18:54
Лучший ответ Сообщение было отмечено Pain123 как решение

Решение

Python
1
2
3
4
5
6
7
8
9
def vebor1():
    if slog == 1:
        oper1()
    elif slog == 2 :
        oper1()
    elif slog == 3 :
        oper1()
    elif slog == 4:
        oper1()
зачем куча условий если в результате все вызывают одну и ту же функцию да и вообще функция нигде не используется
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
import random
 
def level(x):
    level_dict = {1 : (0,24), 2 : (25,49),
                      3 : (50,74), 4 : (75,101)}
    return level_dict[x]
 
def oper1(L,R):
    operation = random.choice(['+', '-', '*', '/'])
    print('{} {} {}'.format(L, operation, R))
    if operation == '+':
        res = L + R
    elif operation == '-':
        res = L - R
    elif operation == '*':
        res = L * R
    else:
        res = L / R
    if int(input('Введи ответ -> ')) == res:
        return 'Ответ = {}'.format(res)
    else:
        return 'Не правильно! {}'.format(res)
 
L1,R1 = level(int(input('Введи уровень сложности от 1 до 4 - ')))
print(oper1(L1,R1))
1
0 / 0 / 0
Регистрация: 04.09.2017
Сообщений: 16
05.09.2017, 19:11  [ТС]
Код у тебя не работает, числа должны быть рандомные.
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
05.09.2017, 19:19
Лучший ответ Сообщение было отмечено Pain123 как решение

Решение

увлекся упустил саму суть
Python
1
2
3
4
a,b = level(int(input('Введи уровень сложности от 1 до 4 - ')))
L1 = random.randint(a,b)
R1 = random.randint(a,b)
print(oper1(L1,R1))
или так
Python
1
L1,R1 = [random.randint(a,b) for _ in range(2)]
1
0 / 0 / 0
Регистрация: 04.09.2017
Сообщений: 16
05.09.2017, 19:38  [ТС]
чето всё равно не работает

Добавлено через 8 минут
Ой извини всё работает , моя ошибка!!!!
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
05.09.2017, 19:41
c lambda функцией и словарем еще лучше, нет условий проверки выбранного действия
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
import random
 
def level(x):
    level_dict = {1 : (0,24), 2 : (25,49),
                      3 : (50,74), 4 : (75,101)}
    return level_dict[x]
 
def oper1(L,R,operations):
    
    operation = random.choice(['+', '-', '*', '/'])
    print('{} {} {}'.format(L, operation, R))
    res = operations[operation](L,R)
    
    if int(input('Введи ответ -> ')) == res:
        return 'Ответ = {}'.format(res)
    else:
        return 'Не правильно! {}'.format(res)
    
operations = {'+': lambda a,b: a+b, '-': lambda a,b: a-b,
                    '*': lambda a,b: a*b,'/': lambda a,b: a/b }
              
a,b = level(int(input('Введи уровень сложности от 1 до 4 - ')))
L1,R1 = [random.randint(a,b) for _ in range(2)]
print(oper1(L1,R1,operations))
0
0 / 0 / 0
Регистрация: 04.09.2017
Сообщений: 16
05.09.2017, 19:43  [ТС]
24 строки Афигеть!!!
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
05.09.2017, 19:52
Цитата Сообщение от Pain123 Посмотреть сообщение
24 строки Афигеть!!!
используя некоторые хитрости код еще можно сделать меньше но увы читаться он будет хуже поэтому чисто для выпендрежа
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import random
 
def level(x):
   return  {1 : (0,24), 2 : (25,49),3 : (50,74), 4 : (75,101)}[x]
                       
def oper1(L,R,operations):
    operation = random.choice(['+', '-', '*', '/'])
    print('{} {} {}'.format(L, operation, R))
    res = operations[operation](L,R)
    return 'Ответ = {}'.format(res) if int(input('Введи ответ -> ')) == res else  'Не правильно! {}'.format(res)
 
operations = {'+': lambda a,b: a+b, '-': lambda a,b: a-b,'*': lambda a,b: a*b,'/': lambda a,b: a/b }
a,b = level(int(input('Введи уровень сложности от 1 до 4 - ')))
L1,R1 = [random.randint(a,b) for _ in range(2)]
print(oper1(L1,R1,operations))
0
0 / 0 / 0
Регистрация: 04.09.2017
Сообщений: 16
05.09.2017, 20:25  [ТС]
Ну да.

Добавлено через 31 минуту
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
import random
 
def level(x):
    level_dict = {1 : (0,24), 2 : (25,49),
                      3 : (50,74), 4 : (75,101)}
    return level_dict[x]
 
def oper1(L,R,operations):
    
    operation = random.choice(['+', '-', '*', '/'])
    print('{} {} {}'.format(L, operation, R))
    res = operations[operation](L,R)
    
    if int(input('Введи ответ -> ')) == res:
        return 'Ответ = {}'.format(res)
    else:
        return 'Не правильно! {}'.format(res)
    
operations = {'+': lambda a,b: a+b, '-': lambda a,b: a-b,
                    '*': lambda a,b: a*b,'/': lambda a,b: a/b }
              
a,b = level(int(input('Введи уровень сложности от 1 до 4 - ')))
L1,R1 = [random.randint(a,b) for _ in range(2)]
print(oper1(L1,R1,operations))
Блин не пойму код, если можете, то расскажете как он работает?
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
05.09.2017, 20:29
что именно непонятно?
0
0 / 0 / 0
Регистрация: 04.09.2017
Сообщений: 16
05.09.2017, 20:38  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def level(x):
    level_dict = {1 : (0,24), 2 : (25,49),
                      3 : (50,74), 4 : (75,101)}
    return level_dict[x]   -----Этот момент
 
и это
 
operations = {'+': lambda a,b: a+b, '-': lambda a,b: a-b,
                    '*': lambda a,b: a*b,'/': lambda a,b: a/b }
              
a,b = level(int(input('Введи уровень сложности от 1 до 4 - ')))
L1,R1 = [random.randint(a,b) for _ in range(2)]
print(oper1(L1,R1,operations))
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
05.09.2017, 20:55
Python
1
2
3
level_dict = {1 : (0,24), 2 : (25,49),
                      3 : (50,74), 4 : (75,101)}
                     return level_dict[x]
создается словарь где ключ цифра-уровень, значение кортеж из двух чисел начала и конца диапазона
Python
1
a,b = level(int(input('Введи уровень сложности от 1 до 4 - ')))
тут мы вызываем функцию с аргументом (число) которое передается в функцию evel_dict под псевдонимом х и используется в функции в качестве ключа по которому функция возвращает значение ( кортеж)
Python
1
2
3
4
5
6
7
8
9
10
11
def level(x):
    level_dict = {1 : (0,24), 2 : (25,49),
                      3 : (50,74), 4 : (75,101)}
    return level_dict[x]
print(level(1))
print(level(2))
print(level(4))
 
(0, 24)
(25, 49)
(75, 101)
которые присваиваются переменным a,b = (25, 49) a = 25, b=49
Python
1
2
operations = {'+': lambda a,b: a+b, '-': lambda a,b: a-b,
                    '*': lambda a,b: a*b,'/': lambda a,b: a/b }
тоже словарь где ключ знак операции а значение функция без имени lambda функция. так же в коде по ключу этого словаря вызывается функция которая возвращает результат своей работы
0
0 / 0 / 0
Регистрация: 04.09.2017
Сообщений: 16
05.09.2017, 21:00  [ТС]
Огромное спасибо за всё.
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
05.09.2017, 21:03
аналог
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def plus(a,b):
    print('сложение')
    return a+b
 
def minus(a,b):
   print('вычитание')
   return a-b
 
dict_oper = {'+' : plus, '-' : minus}# пишем имена без скобок иначе будет сразу вызываться что даст ошибку
print (dict_oper['-'](5,3)) # тут уже в скобках пишем аргументы для вызова функции
print (dict_oper['+'](3,3))
 
вычитание
2
сложение
6
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.09.2017, 21:03
Помогаю со студенческими работами здесь

Прошу сделать код ревью с конструктивной критикой
Добрый день! Прошу покритиковать код. https://www43.zippyshare.com/v/OoX5wDpx/file.html

Ревью "Крестики-нолики"
Добрый день, просьба глянуть код, буду рад предложениям/замечаниям :) Так же буду рад если скажите, что все "Ок" :jokingly: ...

Код ревью
В общем препод дал open source проект и дал задание сделать ревью кода какого - то класса... Вот только с java и ООП нашей группе предстоит...

Код ревью
Добрый день. Сделал ajax в ajax и вижу дубляж кода, но не знаю как от него избавиться. Правила форума 5. Запреты и ограничения. ...

Код ревью
Доброго всем времени суток! Попросили сделать код ревью: <?php if (!defined("B_PROLOG_INCLUDED") ||...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru