Найти - Пользователи
Полная версия: Пожалуйста, переведите программу с С++ на Python!
Начало » Python для новичков » Пожалуйста, переведите программу с С++ на Python!
1
HappyPython
Здравствуйте, уважаемые программисты Учусь в 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”;
}
Alen
#!/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())
py.user.next
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]$
Alen
py.user.next
Надо передавать аргумент, иначе метод бесполезен.

?
py.user.next
box = Mail('x@x')
print(box.get_mail())
box.set_mail('y@y')
print(box.get_mail())
PooH
py.user.next
Перевёл cpp'шный код
get_mail, set_mail это у вас осталось в с++
py.user.next
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 ~]$
PooH
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
py.user.next
PooH
get_ set_ чисто плюсовый стиль, за неимением property
Да property рано ещё для школы, она же школьница (ну, по легенде).
Оно же через декоратор делается, а декораторы - продвинутый уровень.

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

s.split('@', 1)
тоже не стал делать ;)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB