zadanie na klasach w pythonie

zadanie na klasach w pythonie
D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0

Cześć ,

mam zadanie do wykonania:

Używając dziedziczenia, rozdziel podstawową klasę wizytówki na dwie osobne: pierwsza (BaseContact) powinna przechowywać podstawowe dane kontaktowe takie jak imię, nazwisko, telefon, adres e-mail. Za pomocą kolejnej klasy (BusinessContact) rozszerz klasę bazową o przechowywanie informacji związanych z pracą danej osoby – stanowisko, nazwa firmy, telefon służbowy.
Oba typy wizytówek, powinny oferować metodę contact(), która wyświetli na konsoli komunikat w postaci “Wybieram numer +48 123456789 i dzwonię do Jan Kowalski”. Wizytówka firmowa powinna wybierać służbowy numer telefonu, a wizytówka bazowa prywatny.
Oba typy wizytówek powinny mieć dynamiczny atrybut label_length, który zwraca długość imienia i nazwiska danej osoby.
Stwórz funkcję create_contacts, która będzie potrafiła komponować losowe wizytówki. Niech ta funkcja przyjmuje dwa parametry: rodzaj wizytówki oraz ilość. Wykorzystaj bibliotekę faker do generowania danych.

Mam ogólnie problem próbowałem to pisać , ale mam problem z napisaniem tego , czy mógłby ktoś mi to poprawić ? Bo męczę się z tym długi czas.

Kopiuj
import email
from posixpath import supports_unicode_filenames
from typing_extensions import Self
from unicodedata import name
from faker import Faker
fake = Faker(['th_TH', 'pl_PL'])

card =""
xc =""
data_1=""
n = 0

n = int(input('wpisz'))

class  BaseContact:
    
    def __init__(self , name  , telephone_number , email ):
        self.name = name
        self.telephone_number = telephone_number
        self.email = email
    
    def contact(): 
       print(f'Wybieram numer +48 {lista_of_contacts[0]} i dzwonię do {lista_of_contacts[1]}') 
       print(f'Wybieram numer służbowy +48 {lista_of_contacts[2]} i dzwonię do {lista_of_contacts[0]}')  


class BusinessContact(BaseContact):
    def __init__(self , company_position , company_name , company_number , *args, **kwargs):
       super().__init__(*args, **kwargs)
       self.company_position = company_position
       self.company_name = company_name
       self.company_number = company_number
       
def fake_contact(BusinessContact):

        company_position = fake.job()
        company_name = fake.company()
        email = fake.email()
        name = fake.name()
        company_number = fake.msisdn()[3:]
        telephone_number = fake.msisdn()[3:]

        lista_of_contacts = []
        for i in range(n):
            card = BusinessContact()
            lista_of_contacts.append(name , telephone_number , company_number , company_position , email ,company_name)

        
        return lista_of_contacts

xc.contact()
xc = BaseContact(name , telephone_number , email)
edytowany 2x, ostatnio: Riddle
KamilAdam
Musisz wkleić kod między ``` żeby coś było widać bo teraz wcięcia się totalnie rozjechały
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:17 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
1

czy mógłby ktoś mi to poprawić

A co konkretnie chciałbyś żeby ci poprawić? Co konkretnie nie działa?


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
edytowany 2x, ostatnio: KamilAdam
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10067
0

To zadanie nie ma sensu całkowicie.

Równie dobrze ktoś mógłby zadań zadanie: pomaluj ścianę używając krzesła i piły spalinowej.

Zobacz pozostałe 7 komentarzy
veneficus
@Riddle: Ale gdzie tu anty-pattern?
KamilAdam
Używanie dziedziczenia zamiast kompozycji
Riddle
Tak, to jedno. Ale już pomijając to; to dziedziczenie "business card" z "base card" jest lewe. To jest ten sam antypattern, gdzie jak amatorzy mają w swojej grze klasę Fish i klasę Animal to sobie bzdurają ze klasa Fish MUSI dziedziczyć z Animal. Nie ma ku temu technicznych powodów, po prostu ludziom się wydaje że tak ma być.
Riddle
On się bierze z tego że pół mózgi mówią że dziedziczenie to "is-a relation", co jest nie prawda. Dziedziczenie to nic innego jak redeklaracja nie-abstrakcyjnych memeberów w pod-zakresie, nic więcej.
D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0
KamilAdam napisał(a):

czy mógłby ktoś mi to poprawić

A co konkretnie chciałbyś żeby ci poprawić? Co konkretnie nie działa?

Bo zrobiłem najpierw jedną klase według zadania z danymi prywatnymi potem druga klase z danymi biznesowymi. Potem mam zrobić funkcje która zwraca losowe dane funkcja faker. I zrobiłem by to dodało do listy i potem ma zwrócić dane z funkcji i te dane ma przypisać do metody contact() .

Jak przypisać dane z funkcji do metod w klasach bo jak robię np. xc = (nazwa klasy)("sdss" , "dsds") itp. i potem wywołanie xc.contact() to działa , ale jak mam zwrócone dane w postaci zmiennej np. xc = (nazwa klasy)(zmienna_1, zmienna_2 itp.) i potem xc.contact() to w tej sytuacji to nie działa . Czy da się przypisywac jakoś zmienne zwórcone przez funkcje do jakiejs metody w klasie?

A co do mojego zadania to w tej funkcji create_contact jest jakiś błąc i potem z przypisaniem tego do metody contact w pierwszej klasie basecontact ,mam nadzieję , że zrozumiale wyjsniłem o co mi chodzi teraz?

KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:17 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
0
dawid584 napisał(a):
KamilAdam napisał(a):

czy mógłby ktoś mi to poprawić

A co konkretnie chciałbyś żeby ci poprawić? Co konkretnie nie działa?

Bo zrobiłem najpierw jedną klase według zadania z danymi prywatnymi potem druga klase z danymi biznesowymi. Potem mam zrobić funkcje która zwraca losowe dane funkcja faker. I zrobiłem by to dodało do listy i potem ma zwrócić dane z funkcji i te dane ma przypisać do metody contact() .

Nie opisuj co robi twój kod. To jest o wiele gorsze niż czytanie go

Jak przypisać dane z funkcji do metod w klasach bo jak robię np. xc = (nazwa klasy)("sdss" , "dsds") itp. i potem wywołanie xc.contact() to działa , ale jak mam zwrócone dane w postaci zmiennej np. xc = (nazwa klasy)(zmienna_1, zmienna_2 itp.) i potem xc.contact() to w tej sytuacji to nie działa . Czy da się przypisywac jakoś zmienne zwórcone przez funkcje do jakiejs metody w klasie?

Sorry, nic nie rozumiem. W sensie że wywołujesz konstruktor klasy i czasem działa, a czasem nie działa?

A co do mojego zadania to w tej funkcji create_contact jest jakiś błąc i potem z przypisaniem tego do metody contact w pierwszej klasie basecontact ,mam nadzieję , że zrozumiale wyjsniłem o co mi chodzi teraz?

Może jest błąd, może nie ma. Kodu create_contact nie dałeś wiec o tym cięzko się wypowiedzieć


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0
KamilAdam napisał(a):

Sorry, nic nie rozumiem. W sensie że wywołujesz konstruktor klasy i czasem działa, a czasem nie działa?

dam przykład jest:

Kopiuj
class car:
  def kot:
    print (f"{x}  , {y}")

potem jest jakaś funkcja poza klasą która ma return i zwraca zmienną x , y

no i jak chcę uruchomić tą metodę powyżej kot to nie mogę zrobić kot() , ale muszę najpierw zrobić jakąś zmienną np. r = car( dane ) no i wywołanie tej metody r.kot().

Bo jak w piszę np. r = car("słoń " , "LEW") to bez problemu to się przypisuje i meotda wyśiwtla to co chcę , ale jak wpiszę zwrócone zmienne np. r =car( x , y ) , i potem r.kot() to mi wyświetli błędy.
Jak przypisać zwrócone zmienne przez funkcję do metody w klasie ?

Od nie dawna uczę się programowac , więc nie wszystko jeszcze dobrze rozumiem.

edytowany 1x, ostatnio: Riddle
Riddle
Osadzaj kod w znaczniki ```py oraz ```, bo się tego nie da czytać.
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10067
3
Kopiuj
from faker import Faker

class BaseContact:
    def __init__(self , name, phone, email):
        self.name = name
        self.phone = phone
        self.email = email

    @property
    def label_length(self):
      return len(self.name)

    def contact(self): 
       print(f'Wybieram numer +48 {self.phone} i dzwonię do {self.name}') 

class BusinessContact(BaseContact):
    def __init__(self, name, phone, email, company_position, company_name, company_number):
       super().__init__(name, phone, email)
       self.company_position = company_position
       self.company_name = company_name
       self.company_number = company_number
       
     def contact(self): 
       print(f'Wybieram numer służbowy +48 {self.phone} i dzwonię do {self.name}')  



def fake_contacts(is_business, amount):
    fake = Faker(['th_TH', 'pl_PL'])
    company_position = fake.job()
    company_name = fake.company()
    email = fake.email()
    name = fake.name()
    company_number = fake.msisdn()[3:]
    telephone_number = fake.msisdn()[3:]

    lista_of_contacts = []
    for i in range(amount):
        if is_business:
          card = BusinessContact(name, telephone_number, email, company_number, company_position, company_name)
        else:
          card = BaseContact(name, telephone_number, email)
        lista_of_contacts.append(card)

    return lista_of_contacts




n = int(input('wpisz'))

fake_contacts(True, n) # biznesowe kontakty
fake_contacts(False, n) # normalne kontakty
edytowany 5x, ostatnio: Riddle
D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0
Riddle napisał(a):
Kopiuj
from faker import Faker

class BaseContact:
    def __init__(self , name, phone, email):
        self.name = name
        self.phone = phone
        self.email = email

    @property
    def label_length(self):
      return len(self.name)

    def contact(self): 
       print(f'Wybieram numer +48 {self.phone} i dzwonię do {self.name}') 

class BusinessContact(BaseContact):
    def __init__(self, name, phone, email, company_position, company_name, company_number):
       super().__init__(name, phone, email)
       self.company_position = company_position
       self.company_name = company_name
       self.company_number = company_number
       
     def contact(self): 
       print(f'Wybieram numer służbowy +48 {self.phone} i dzwonię do {self.name}')  



def fake_contacts(is_business, amount):
    fake = Faker(['th_TH', 'pl_PL'])
    company_position = fake.job()
    company_name = fake.company()
    email = fake.email()
    name = fake.name()
    company_number = fake.msisdn()[3:]
    telephone_number = fake.msisdn()[3:]

    lista_of_contacts = []
    for i in range(amount):
        if is_business:
          card = BusinessContact(name, telephone_number, email, company_number, company_position, company_name)
        else:
          card = BaseContact(name, telephone_number, email)
        lista_of_contacts.append(card)

    return lista_of_contacts




n = int(input('wpisz'))

fake_contacts(True, n) # biznesowe kontakty
fake_contacts(False, n) # normalne kontakty

Powiedz mi tylko jedną rzecz jak zrobić by się te printy wyświetlały teraz , bo w klasie nie moge przy metodzie zrobić contact() bo mi pokazuje błąd ?

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10067
0
dawid584 napisał(a):

Powiedz mi tylko jedną rzecz jak zrobić by się te printy wyświetlały teraz , bo w klasie nie moge przy metodzie zrobić contact() bo mi pokazuje błąd ?

Sprzedam Ci mroczny sekret, którego nie uczą w szkołach.

bo w klasie nie moge przy metodzie zrobić contact() bo mi pokazuje błąd ?

Dopóki nie napiszesz jaki błąd, to nikt, ale to nikt się nie domyśli o co chodzi.

Wklei błąd który masz.

D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0
Riddle napisał(a):
dawid584 napisał(a):

Powiedz mi tylko jedną rzecz jak zrobić by się te printy wyświetlały teraz , bo w klasie nie moge przy metodzie zrobić contact() bo mi pokazuje błąd ?

Sprzedam Ci mroczny sekret, którego nie uczą w szkołach.

bo w klasie nie moge przy metodzie zrobić contact() bo mi pokazuje błąd ?

Dopóki nie napiszesz jaki błąd, to nikt, ale to nikt się nie domyśli o co chodzi.

Wklei błąd który masz.

Kopiuj
File "c:\Kodilla\learning-git-6\Untitled-1.py", line 10, in <module>
    class BaseContact:
  File "c:\Kodilla\learning-git-6\Untitled-1.py", line 25, in BaseContact
    contact()
TypeError: BaseContact.contact() missing 1 required positional argument: 'self'

A dodałem contact() jak poniżej , do uruchamiania tej metody:

Kopiuj
def contact(self): 
       print(f'Wybieram numer +48 {self.phone} i dzwonię do {self.name}') 
       print(f'Wizytówka prywatna {self.name} , +48{self.phone} , {self.email}')
       contact()
edytowany 1x, ostatnio: Riddle
ledi12
  • Rejestracja:ponad 5 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Wrocław
47

w klasie nie moge przy metodzie zrobić contact() bo mi pokazuje błąd ? Pisz Pan po polsku :P

To co próbujesz zrobić przypomina wywołanie metody statycznej, ale ta metoda nie jest statyczna - Obiekt musi zostać najpierw zainicjalizowany.

fake_contacts Zwraca Ci listę obiektów typu BaseContact. Zwyczajnie wywołaj sobie tą funkcje np podczas iteracji po każdym obiekcie, albo po konkretnym indexie.

Kopiuj
for card in fake_contacts:
  card.contact()

A jeśli w przypadku BusinessContact chcesz wywołać metodę rodzica o tej samej nazwie to robisz to za pomocą super() - identycznie jak przy wywoałniu ___init__


Robię http response status cody w martwych ciągach
edytowany 1x, ostatnio: ledi12
D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0

jak teraz zrobić by mi się wyświetlały printy z tego def contact() ?

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10067
0
dawid584 napisał(a):
Kopiuj
File "c:\Kodilla\learning-git-6\Untitled-1.py", line 10, in <module>
    class BaseContact:
  File "c:\Kodilla\learning-git-6\Untitled-1.py", line 25, in BaseContact
    contact()
TypeError: BaseContact.contact() missing 1 required positional argument: 'self'

A dodałem contact() jak poniżej , do uruchamiania tej metody:

Kopiuj
def contact(self): 
       print(f'Wybieram numer +48 {self.phone} i dzwonię do {self.name}') 
       print(f'Wizytówka prywatna {self.name} , +48{self.phone} , {self.email}')
       contact()

Powinieneś zrobić self.contact().

D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0
Riddle napisał(a):
dawid584 napisał(a):
Kopiuj
File "c:\Kodilla\learning-git-6\Untitled-1.py", line 10, in <module>
    class BaseContact:
  File "c:\Kodilla\learning-git-6\Untitled-1.py", line 25, in BaseContact
    contact()
TypeError: BaseContact.contact() missing 1 required positional argument: 'self'

A dodałem contact() jak poniżej , do uruchamiania tej metody:

Kopiuj
def contact(self): 
       print(f'Wybieram numer +48 {self.phone} i dzwonię do {self.name}') 
       print(f'Wizytówka prywatna {self.name} , +48{self.phone} , {self.email}')
       contact()

Powinieneś zrobić self.contact().

Ok.

zrobiłem

def contact(self):
print(f'Wybieram numer +48 {self.phone} i dzwonię do {self.name}')
print(f'Wizytówka prywatna {self.name} , +48{self.phone} , {self.email}')
self.contact()

No i pisze wpisz liczbe podaje np. 8 i pote jest nadal nic , jak zrobię bez wcięcia to podaje że self jest nie zdefiniowane.

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10067
1
dawid584 napisał(a):

No i pisze wpisz liczbe podaje np. 8 i pote jest nadal nic , jak zrobię bez wcięcia to podaje że self jest nie zdefiniowane.

No bo nie wołasz funkcji .contact().

D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0
Riddle napisał(a):
dawid584 napisał(a):

No i pisze wpisz liczbe podaje np. 8 i pote jest nadal nic , jak zrobię bez wcięcia to podaje że self jest nie zdefiniowane.

No bo nie wołasz funkcji .contact().

Jak nie wołam funkcji ? Nie rozumiem. Wpisałem self.contact()

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)