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

Что не так в задаче на основы ООП (Python)

12.12.2023, 21:00. Показов 985. Ответов 3

Студворк — интернет-сервис помощи студентам
Что не так в задаче по основам ООП (python)?

задачка с Яндекс Хэндбука

Рассмотрим объект «Программист», который задаётся именем, должностью и количеством отработанных часов. Каждая должность имеет собственный оклад (заработную плату за час работы). В нашей импровизированной компании существуют 3 должности:

Junior — с окладом 10 тугриков в час;

Middle — с окладом 15 тугриков в час;

Senior — с окладом 20 тугриков в час по умолчанию и +1 тугрик за каждое новое повышение.

Напишите класс Programmer, который инициализируется именем и должностью (отработка у нового работника равна нулю). Класс реализует следующие методы:

work(time) — отмечает новую отработку в количестве часов time;

rise() — повышает программиста;

info() — возвращает строку для бухгалтерии в формате: <имя> <количество отработанных часов>ч. <накопленная зарплата>тгр.

Примечание

Ваше решение должно содержать только классы и функции. В решении не должно быть вызовов инициализации требуемых классов.

Пример

Ввод:

programmer = Programmer('Васильев Иван', 'Junior')

programmer.work(750)

print(programmer.info())

programmer.rise()

programmer.work(500)

print(programmer.info())

programmer.rise()

programmer.work(250)

print(programmer.info())

programmer.rise()

programmer.work(250)

print(programmer.info())

Вывод:

Васильев Иван 750ч. 7500тгр.

Васильев Иван 1250ч. 15000тгр.

Васильев Иван 1500ч. 20000тгр.

Васильев Иван 1750ч. 25250тгр.

Прикрепляю свой код
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
class Programmer:
 
    def __init__(self, name, role, up=0, n=20, rr=0, sm=0, time=0):
        self.up = up #переменная уровней должностей, начиная с 0 - Junior
        self.role = role #Дожность
        self.name = name #имя работника
        self.n = n #зарплата сеньоров(тгр/ч), получивших повышение(назвал Milord)
        self.rr = rr #суммарное кол-во отработанных часов 
        self.sm = sm #переменная для подсчёта всех заработанных денег работником
        self.time = time # часы работы
 
    def work(self, timee):
        self.time = timee 
        self.rr = self.rr + self.time
  
    def rise(self):
        if self.role == 'Middle':
            self.up = 1
        if self.role == 'Senior':
            self.up = 2
        self.up += 1
        if self.up == 1:
            self.role = 'Middle'
        if self.up == 2:
            self.role = 'Senior'
        if self.up >= 3:
            self.role = 'Milord'
            self.n += 1
        
    def info(self):
        if self.role == 'Junior':
            self.sm = self.time * 10
            return f'{self.name} {self.time}ч. {self.sm}тгр.'
        if self.role == 'Middle':
            self.sm = (self.time * 15) + self.sm
            return f'{self.name} {self.rr}ч. {self.sm}тгр.'
        if self.role == 'Senior':
            self.sm = self.sm + (self.time * 20)
            return f'{self.name} {self.rr}ч. {self.sm}тгр.'
        if self.role == 'Milord':
            self.sm = (self.time * self.n) + self.sm
            return f'{self.name} {self.rr}ч. {self.sm}тгр.'
Итак, первые 4 проверки(включая указанную в примере) решение проходит, но дальше не принимает

Прошу помощи у знающих, что может быть не так?

P.s: просьба отнестись ко всем косякам с понимаем, ведь я - нуб
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.12.2023, 21:00
Ответы с готовыми решениями:

Изучаю Python, сейчас учу основы ООП, где можно найти задачи по ООП
Скиньте пожалуйста источники с задачами(желательно на русском)

Python, Основы программирования and ООП
Вообщем изучал я основы программирования соответственно python. Прошел все базовые курсы по синтаксису python, тобишь переменные, циклы,...

Что в коде не так - основы Java
import java.io.BufferedReader; import java.io.InputStreamReader; public class Solution { public static void main(String args)...

3
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
12.12.2023, 22:20
ITsss_jstn,
Цитата Сообщение от ITsss_jstn Посмотреть сообщение
rise() — повышает программиста;
и каким образом? при вызове этого метода звание а соответственно и зарплата должны меняться на повышение. еще общая сумма должна вычисляются не от общего времени а от времени в каждой должности. то есть 5 часов * 10 в должности Junior плюс 3ч * 15 в должности Middle после повышения. но это мое мнение и как вариант ошибки. попробуй по примеру просчитать так ли это.
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
13.12.2023, 02:00
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
class Programmer:
    salary_dict = {'Junior': 10, 'Middle': 15, 'Senior': 20}
 
    def __init__(self, name, position):
        self.name = name
        self.position = position
        self.time = 0
        self.salary = Programmer.salary_dict[position]
        self.pay = 0
 
    def work(self, time):
        self.time += time
        self.pay += time * self.salary
 
    def rise(self):
        match self.position:
            case 'Junior':
                self.position = 'Middle'
                self.salary = Programmer.salary_dict[self.position]
            case 'Middle':
                self.position = 'Senior'
                self.salary = Programmer.salary_dict[self.position]
            case 'Senior':
                self.salary += 1
 
    def info(self):
        return f'{self.name} {self.time}ч. {self.pay}тгр.'
 
programmer = Programmer('Васильев Иван', 'Junior')
programmer.work(750)
print(programmer.info())
programmer.rise()
programmer.work(500)
print(programmer.info())
programmer.rise()
programmer.work(250)
print(programmer.info())
programmer.rise()
programmer.work(250)
print(programmer.info())



А вообще, такие наборы ветвлений
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def info(self):
        if self.role == 'Junior':
            self.sm = self.time * 10
            return f'{self.name} {self.time}ч. {self.sm}тгр.'
        if self.role == 'Middle':
            self.sm = (self.time * 15) + self.sm
            return f'{self.name} {self.rr}ч. {self.sm}тгр.'
        if self.role == 'Senior':
            self.sm = self.sm + (self.time * 20)
            return f'{self.name} {self.rr}ч. {self.sm}тгр.'
        if self.role == 'Milord':
            self.sm = (self.time * self.n) + self.sm
            return f'{self.name} {self.rr}ч. {self.sm}тгр.'
противоречат принципам ООП, здесь полиморфизм должен срабатывать. То, что в функции rise пришлось это использовать - это недостаток проекта, предложенного авторами задачи. В реале все должности должны были бы быть подклассами класса "Программист".
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
13.12.2023, 11:56
Еще вариант:
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
class Programmer:
    positions = ['Junior', 'Middle', 'Senior']
    salaries = [10, 15, 20]
 
    def __init__(self, name, position):
        self.name = name
        self.position_ind = Programmer.positions.index(position)
        self.time = 0
        self.bonus = 0
        self.pay = 0
 
    def work(self, time):
        self.time += time
        self.pay += time * (Programmer.salaries[self.position_ind] + self.bonus)
 
    def rise(self):
        try:
            Programmer.positions[self.position_ind + 1]
            self.position_ind += 1
        except:
            self.bonus += 1
 
    def info(self):
        return f'{self.name} {self.time}ч. {self.pay}тгр.'
 
programmer = Programmer('Васильев Иван', 'Junior')
programmer.work(750)
print(programmer.info())
programmer.rise()
programmer.work(500)
print(programmer.info())
programmer.rise()
programmer.work(250)
print(programmer.info())
programmer.rise()
programmer.work(250)
print(programmer.info())
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.12.2023, 11:56
Помогаю со студенческими работами здесь

Подскажите пожалуйста что не так в задаче?
Почему-то код ничего не выводит, помогите пожалуйста. Где ошибка? #include &lt;bits/stdc++.h&gt; using namespace std ; int main() { ...

Что не так в этой простой задаче?
Ruby меня пинает уже пол дня, а я так и не могу понять в чем причина. Задача - найти локальный максимум в массиве чисел. Формула ниже....

Основы Java освоены, понятия, парадигмы, ООП. Читать код могу, понятия есть, но все бы ничего, что дальше?
Доброго времени суток товарищи Столкнулся с такой ситуацией: куда двигаться дальше? Основы Java освоены, понятия, парадигмы, ООП....

ООП..ошибка ввода-вывода...не понимаю что не так..
Работа с ООП...вот сама программа: program Biblioteka; uses SysUtils, Myb in 'Myb.pas'; var N: TDom_Biblioteka ;

Лучший интерактивный самоучитель с++, но так понравился, что думаю, а что если после python изучать с++?
http://academy.cppstudio.com/courses/ 1.) поделитесь опытом после какого языка вы перешли на с++. 2.) Что вам нравится/не очень в языке...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru