Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 15, 2015 08:02:48

HappyPython
Зарегистрирован: 2015-02-15
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Пожалуйста, переведите программу с С++ на Python!

Здравствуйте, уважаемые программисты Учусь в 11 классе, раньше проходила С++, сейчас новый учитель переучивает на Python. Решить данную задачу я на Python не смогла.. Помогите, пожалуйста!
Условие:

Решение на С++
#include<iostream>

class Mail{
private:
std::string box, server;

public:
Mail(std::string s){
SetMail(s);
}
void SetMail(std::string s){
std::string::size_type ind=s.find('@');
box.assign(&s, &s);
server.assign(&s, &s);
}
std::string GetMail()const{
return box+“@”+server;
}
void SetBox(std::string s){
box=s;
}
void SetServer(std::string s){
server=s;
}
};

int main(){
Mail a(“mybox@mail.ru”);
std::cout<<a.GetMail()<<“\n”;
a.SetBox(“myotherbox”);
std::cout<<a.GetMail()<<“\n”;
a.SetServer(“yandex.ru”);
std::cout<<a.GetMail()<<“\n”;
}

Офлайн

#2 Фев. 16, 2015 06:51:41

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Пожалуйста, переведите программу с С++ на Python!

#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
class Mail:
    def __init__(self, email):
        self.email = email
        self.set_mail()
    def set_mail(self):
        self.box = self.email.split('@')[0]
        self.server = self.email.split('@')[1]
    def get_mail(self):
        return self.box + '@' + self.server
    def set_box(self, box):
        self.box = box
    def set_server(self, server):
        self.server = server
  
if __name__ == '__main__':
    a = Mail('mybox@mail.ru')
    print(a.get_mail())
    a.set_box('myotherbox')
    print(a.get_mail())
    a.set_server("yandex.ru")
    print(a.get_mail())

Офлайн

#3 Фев. 16, 2015 07:22:35

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Пожалуйста, переведите программу с С++ на Python!

Alen
def set_mail(self):
Надо передавать аргумент, иначе метод бесполезен.

Перевёл cpp'шный код:
#!/usr/bin/env python3
 
# создаёт объект для хранения почтового адреса
 
class Mail:
    def __init__(self, s):
        self.set_mail(s)
    def set_mail(self, s):
        self.box, self.server = s.split('@')
    def get_mail(self):
        return self.box + '@' + self.server
    def set_box(self, s):
        self.box = s
    def set_server(self, s):
        self.server = s
 
def main():
    a = Mail('mybox@mail.ru')
    print(a.get_mail())
    a.set_box('myotherbox')
    print(a.get_mail())
    a.set_server('yandex.ru')
    print(a.get_mail())
 
if __name__ == '__main__':
    main()

[guest@localhost py]$ ./mailbox.py 
mybox@mail.ru
myotherbox@mail.ru
myotherbox@yandex.ru
[guest@localhost py]$



Отредактировано py.user.next (Фев. 16, 2015 07:34:44)

Офлайн

#4 Фев. 16, 2015 07:50:26

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Пожалуйста, переведите программу с С++ на Python!

py.user.next
Надо передавать аргумент, иначе метод бесполезен.

?

Офлайн

#5 Фев. 16, 2015 08:26:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Пожалуйста, переведите программу с С++ на Python!

box = Mail('x@x')
print(box.get_mail())
box.set_mail('y@y')
print(box.get_mail())



Офлайн

#6 Фев. 16, 2015 12:17:31

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Пожалуйста, переведите программу с С++ на Python!

py.user.next
Перевёл cpp'шный код
get_mail, set_mail это у вас осталось в с++



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#7 Фев. 17, 2015 00:21:59

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Пожалуйста, переведите программу с С++ на Python!

PooH
get_mail
[guest@localhost ~]$ python3 -mtimeit -s 'box = "box"; server = "server"' 'box + "@" + server'
1000000 loops, best of 3: 0.264 usec per loop
[guest@localhost ~]$ python3 -mtimeit -s 'box = "box"; server = "server"' '"@".join((box, server))'
1000000 loops, best of 3: 0.284 usec per loop
[guest@localhost ~]$



Офлайн

#8 Фев. 17, 2015 04:53:42

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Пожалуйста, переведите программу с С++ на Python!

py.user.next
$ python3 -mtimeit -s ‘box = “box”; server = “server”’ ‘box + “@” + server’
1000000 loops, best of 3: 0.264 usec per loop
$ python3 -mtimeit -s ‘box = “box”; server = “server”’ ‘“@”.join((box, server))’
1000000 loops, best of 3: 0.284 usec per loop
$
Это к чему? Я имел ввиду, что get_ set_ чисто плюсовый стиль, за неимением property



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#9 Фев. 17, 2015 05:59:37

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Пожалуйста, переведите программу с С++ на Python!

PooH
get_ set_ чисто плюсовый стиль, за неимением property
Да property рано ещё для школы, она же школьница (ну, по легенде).
Оно же через декоратор делается, а декораторы - продвинутый уровень.

PooH
Это к чему?
Ну, я и подумал, что не то в get_mail и set_mail, если я их в точности перевёл, минуя лишний момент с индексом.

s.split('@', 1)
тоже не стал делать ;)



Отредактировано py.user.next (Фев. 17, 2015 06:01:06)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version