kamień papier nożyce

warjatt11
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 2 lata
  • Postów:10
0

Witam, jestem raczkującym programista, przerabiam sobie aktualnie temat funkcji i po zdobyciu już jakiejś wiedzy chciałem sobie poćwiczyć pisząc jakiś prosty program, do głowy wpadł pomysł z grą kamień papier nożyce, zamieszczę tutaj kod jaki udało mi się wyskrobać i byłbym wdzięczny jak ktoś o większej wiedzy podpowie co by można było zmienić żeby kod był bardziej czytelny (dla mnie osobiście jest, aczkolwiek myślę że dużo można by tutaj jeszcze zmienić), bądź jak go można zmienić/skrócić

Kopiuj
import random
import sys

kpn = ['kamień','papier','nożyce']

def play_again():
    answer = None
    while answer != 'y' or answer != 'n':
        if answer == 'n':
            print("Dziękuje za gre, zamykam program!")
            sys.exit()
        elif answer == 'y':
            wynik()
        answer = input("Czy chcesz zagrać jeszcze raz? y/n: ")


def comp_choice():
    cc = random.choice(kpn)
    return cc

def player_choice():
    pc = input("wybierz kamień[k], papier[p] lub nożycze[n] : ")
    while True:
        if pc == 'k':
            pc = 'kamień'
            break
        elif pc == 'p':
            pc = 'papier'
            break
        elif pc == 'n':
            pc = 'nożyce'
            break
        pc = input("wybierz jeszcze raz: kamień[k], papier[p] lub nożycze[n] : ")
    return pc

def wynik():
    cc = comp_choice()
    pc = player_choice()
    print('gracz : ', pc)
    print("komputer : ",cc)
    if cc == pc:
        print("remis")
    elif cc == 'kamień' and pc == 'nożyce':
        print('Wygrywa komputer')
    elif cc == 'kamień' and pc == 'papier':
        print("Wygrywa gracz")
    elif cc == 'papier' and pc == 'kamień':
        print("Wygrywa komputer")
    elif cc == 'papier' and pc == 'nożyce':
        print("Wygrywa gracz")
    elif cc == 'nożyce' and pc == 'papier':
        print("Wygrywa komputer")
    else:
        print("wygrywa gracz")

wynik()
play_again()
edytowany 1x, ostatnio: cerrato
Haskell
  • Rejestracja:ponad 9 lat
  • Ostatnio:11 miesięcy
  • Postów:4700
2

Pierwsza rzecz, którą możesz zrobić to wytłumacz po co zamieniasz p na papier itd? Przecież w funkcji wynik możesz posługiwać się jednoliterowymi nazwami.


Zaglądali do kufrów, zaglądali do waliz, nie zajrzeli do d**y - tam miałem socjalizm. Czesław Miłosz
cerrato
słuszna uwaga, tak się skupiłem na tych IFach, że nie zwróciłem na to uwagi ;)
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 17 godzin
  • Lokalizacja:Poznań
  • Postów:8769
6

Pierwsza i wielokrotnie wałkowana sprawa - nazwy zmiennych. Wiem, że może się to wydawać mało istotne przy takim małym programiku, ale lepiej od początku wyrabiać dobre nawyki. Zmienne cc czy pc za wiele nie mówią. Ja zamiast tego bym je nazwał opisowo, coś w stylu computerChoice = getComputerChoice(). Poza tym jesteś niekonsekwentny - raz nazywasz funkcje po angielsku, a potem walisz wynik() :P

Po drugie - drabinki if'ów są czymś, czego lepiej unikać.

Ja bym wydzielił całe sprawdzanie odpowiedzi do osobnej funkcji, ale najpierw w ogóle bym sprawdził coś, o czym chyba zapomniałeś - czyli remis. Jeśli obaj gracze wybiorą taką samą odpowiedź, to trzeba poinformować o tym, że mamy remis i nie ma sensu prowadzić dalszych sprawdzeń. Jeśli natomiast odpowiedzi są różne, to wywołujemy funkcję sprawdzającą, w której zamiast wielu IF dałbym konstrukcję typu SWITCH/CASE. Poniżej pseudokod (sam sobie to zapiszesz w Pythonie)

Kopiuj
winner=komputer
switch computerChoice
case kamien:
  if (playerChoice==papier): winner=player 
case nozyce:
  if (playerChoice==kamien): winner=player
case papier:
  if (playerchoice==nozyce): winner=player

EDIT
zauważyłem, że na samym początku sprawdzenia wyniku masz uwzględniony remis, przepraszam i zwracam honor ;)


edytowany 5x, ostatnio: cerrato
lion137
W Pythonie nie ma switch/case.
artur_waw
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad rok
  • Postów:155
1

@warjatt11: Tak na szybko

  • dlaczego mieszasz polskie nazwy z angielskimi (pisz kod po angielsku)
  • nazywaj zmienne w zrozumiały sposób a nie cc czy pc
  • zastanów sie jak inaczej sprawdzić kto wygrał, gdybyś miał rozbudowaną wersję (paper rock scissors lizard spock) to miałbyś już całkiem pokaźną drabinkę if'ów
warjatt11
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 2 lata
  • Postów:10
1

dzięki za uwagi, co to nazw zmiennych tutaj oczywiście widzę swój problem, aczkolwiek nie wiem czemu nad nimi nie popracowałem bardziej(dziękuje za uwagę) a co się tyczy if'ów to racja że średnio to wygląda lecz nie wpadłem na żaden pomysł jak inaczej zaimplementować wynik, próbowałem zrobić to z słownikiem ale nie wychodziło mi to w ogóle

cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 17 godzin
  • Lokalizacja:Poznań
  • Postów:8769
0

No to teraz masz temat do zabawy - wprowadź nasze sugestie w życie i pokaż, co stworzyłeś :)


warjatt11
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 2 lata
  • Postów:10
1

Wyskrobałem coś takiego, zamiast porównywać if'ami to zastąpiłem to słownikiem, nie będę oszukiwał że sam do tego doszedłem tylko znalazłem takie rozwiązanie w internecie, ale zrozumiałem jak ono działa(więc chyba dobre posunięcie?:)) więc nie jest to bezmyślne kopiuj/wklej

Kopiuj
import random
import sys

rock_stone_scissors = ['kamień','papier','nożyce']

def play_again():
    answer = input("Czy chcesz zagrać jeszcze raz? y/n: ")
    while answer != 'y' or answer != 'n':
        if answer == 'n':
            print("Dziękuje za gre, zamykam program!")
            sys.exit()
        elif answer == 'y':
            victory()
        else:
            print("Nie ma takiej odpowiedzi")
        answer = input("Czy chcesz zagrać jeszcze raz? y/n: ")

def cpu_choice():
    getComputer_Choice = random.choice(rock_stone_scissors)
    return getComputer_Choice

def player_choice():
    getPlayer_Choice = input("wybierz kamień[k], papier[p] lub nożycze[n] : ")
    while True:
        if getPlayer_Choice == 'k':
            getPlayer_Choice = 'kamień'
            break
        elif getPlayer_Choice == 'p':
            getPlayer_Choice = 'papier'
            break
        elif getPlayer_Choice == 'n':
            getPlayer_Choice = 'nożyce'
            break
        getPlayer_Choice = input("wybierz jeszcze raz: kamień[k], papier[p] lub nożycze[n] : ")
    return getPlayer_Choice

def victory():
    computer_Choice = cpu_choice()
    player_Choice = player_choice()
    print('gracz : ', player_Choice)
    print("komputer : ",computer_Choice)
    if player_Choice == computer_Choice:
        print("remis")
    elif compare(player_Choice,computer_Choice):
        print("Wygrał gracz")
    else:
        print("Wygrał komputer")

def compare(playerChoice,cpuChoice):
    results = {('kamień','nożyce') : True,
               ('kamień','papier') : False,
               ('papier','kamień') : True,
               ('papier','nożyce') : False,
               ('nożyce','papier') : True,
               ('nożyce','kamień') : False}
    return playerChoice,cpuChoice

victory()
play_again()
cerrato
Tylko nadal nie rozumiem, czemu zmieniasz "k" na "kamień" itp, czyli to, o czym pisał @Haskell 2 posty wyżej. Przecież w aplikacji możesz operować tymi jednoliterowymi wartościami podczas porównań i jedynie zamieniać je na słowa podczas wpisywania ich na ekranie.
warjatt11
właśnie nie rozumiem zbytnio o co chodzi, chyba się zagmatwałem, mógłbyś wskazać dokładnie o co kaman? Nie potrafię wyłapać jak to inaczej zapisać
cerrato
użytkownik wprowadza literę K i mógłbyś nią operować, ale Ty zamieniasz wciśnięty klawisz na opis, czyli zamiast "k" mamy "kamień". I potem, chociażby podczas porównywania, używasz już słów a nie liter (linie 51-56 z powyższego listingu). I teraz powiedzmy, że zachodzi potrzeba zmienienia "nożyce" na sekator - musisz w takim przypadku zmienić jednocześnie wartości podane w liniach 5, 32-33 oraz 51-56. Przy tak prostym programie nie będzie to jakąś tragedią, ale w przypadku rzeczy bardziej skomplikowanych już mogą się pojawić schody
cerrato
Dlatego lepiej jest to zrobić na zasadzie "użytkownik wybrał opcję numer 2". Algorytmu porównującego udzielone odpowiedzi nie obchodzi, czy 2 to nożyce, czy walizka ;) Algorytm jedynie musi posiadać informacje o tym, jak "ocenić" dwójkę, z czym wygrywa, a z czym przegrywa. Jeśli chcesz zmienić jej nazwę, to zmieniasz w jednym miejscu. Jeśli chcesz zmienić zasady oceniania, to możesz zrobić, niezależnie od tego, co to 2 oznacza.
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 17 godzin
  • Lokalizacja:Poznań
  • Postów:8769
0

znalazłem takie rozwiązanie w internecie, ale zrozumiałem jak ono działa(więc chyba dobre posunięcie?

Bardzo dobre. Obecnie jest tyle technologii, języków, frameworkow, że nieraz bardzo duża część pracy polega na szukaniu w necie i kopiowaniu. Jest nawet na to określenie SODD czyli Stack Overflow Driven Development ;) Nie chodzi o to, żeby wszystko wykuć na pałę, zresztą jest to nierealne, tylko żeby być zaradnym i umieć skutecznie znaleźć potrzebne informacje.

Twoim plusem jest to, że nie zrobiłeś bezmyślnego kopiuj-wklej, tylko załapałeś zasadę, czyli mamy tutaj podwójny sukces - uzyskałeś działająca apkę oraz się czegoś przy okazji nauczyłeś :)


edytowany 2x, ostatnio: cerrato
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 11 godzin
1
Kopiuj
def compare(playerChoice,cpuChoice):
    results = {('kamień','nożyce') : True,
               ('kamień','papier') : False,
               ('papier','kamień') : True,
               ('papier','nożyce') : False,
               ('nożyce','papier') : True,
               ('nożyce','kamień') : False}
    return playerChoice,cpuChoice

Yyyhhh, a nie tak?

Kopiuj
def compare(playerChoice,cpuChoice):
    results = {('kamień','nożyce') : True,
               ('kamień','papier') : False,
               ('papier','kamień') : True,
               ('papier','nożyce') : False,
               ('nożyce','papier') : True,
               ('nożyce','kamień') : False}
    return results[(playerChoice,cpuChoice)]

λλλ
warjatt11
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 2 lata
  • Postów:10
0

a no prawda, przeanalizowałem kod i zgadza się, tak powinno być, dzięki za uwage

edytowany 1x, ostatnio: cerrato
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 11 godzin
1

No to chyba nie do konca zrozumiales za pierwszym razem :D


λλλ
edytowany 1x, ostatnio: stivens
warjatt11
Nie przyglądałem się wynikowi, sama idee zrozumiałem, teraz jak mi na to zwróciłeś uwage to zacząłem grzebać i rzeczywiście wynik losowo wychodził, jak dodałem nawiasy to wszystko jest jak powinno, tak sobie teraz myślę to rzeczywiście nie miało prawa to działać :D no cóż dobrze że przynajmniej ktoś zwrócił uwage na to pozdro
stivens
No dzialalo losowo bo zawsze dostawales wynik o wartosci logicznej true
sugar_hiccup
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 2 lata
  • Postów:176
1

I cyk

Kopiuj
import random

class Item:
    def __init__(self, name, value):
        self.name = name
        self.value = value

    def __str__(self):
        return self.name

    def __lt__(self, other):
        if (self.value, other.value) in ((0, 2), (2, 0)):
            return self.value > other.value
        return self.value < other.value

    def __eq__(self, other):
        return self.value == other.value

items = {
    'k': Item('kamień', 0),
    'p': Item('papier', 1),
    'n': Item('nożyce', 2)
}

while True:
    player_choice = input('Papier/kamień/nożyce: ').lower()
    player_item = items[player_choice[0]]
    computer_item = items[random.choice(list(items))]

    if player_item == computer_item:
        result_msg = 'Remis'
    elif player_item < computer_item:
        result_msg = 'Przegrałeś'
    else:
        result_msg = 'Wygrałeś'

    print('{}, komputer wybrał {}'.format(result_msg, computer_item))

    if input('Jeszcze raz [t/n]? ') not in ('t', 'T'):
        break

print('Dziękuję za grę!')    

My to na arm napiszemy wszystko i zrobimy co chcemy tyle że 90% kodu to biblioteki z netu albo robota kompilatora Zdajesz sobie sprawę że tak na prawdę wyższy poziom języka może świadczyć jedynie o tym jak niskim poziomem wiedzy może dysponować bałwan,który nazwie się w rezultacie programistą i napisze działający program wciskając zleceniodawcy że tam to akurat musi być 100MHz ARM z 1M pamięci bo tak na prawdę jego pusta łepetyna nie potrafi zrealizować czegoś na innym słabszym mikrokontrolerze
warjatt11
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 2 lata
  • Postów:10
1

Więc dobrze zmodyfikowałem kod i wygląda on następująco

Kopiuj
import random
import sys

rock_stone_scissors = ['k','p','n']

def play_again():
    answer = input("Czy chcesz zagrać jeszcze raz? y/n : ")
    while answer != "y":
        if answer == 'n':
            print("Dziękuje za gre! Zamykam program")
            sys.exit()
        else:
            print("Nie można udzielić takiej odpowiedzi!")
            answer = input("Czy chcesz zagrać jeszcze raz? y/n : ")
    play()

def nameIT(ItemSymbol):
    if (ItemSymbol == 'k'): return 'kamień'
    if (ItemSymbol == 'p'): return 'papier'
    if (ItemSymbol == 'n'): return 'nożyce'

def play():
    player_choice = input("Wybierz kamień[k], papier[p] lub nożycze[n] : ")
    while player_choice != 'k' or 'p' or 'n':
        if player_choice == 'k' or 'p' or 'n':
            break
        player_choice = input("Wybierz jeszcze raz: kamień[k], papier[p] lub nożycze[n] : ")
    cpu_choice = random.choice(rock_stone_scissors)
    print('Gracz : ',nameIT(player_choice))
    print("Komputer : ",nameIT(cpu_choice))
    if nameIT(player_choice) == nameIT(cpu_choice):
        print("Remis")
    elif compare(player_choice,cpu_choice):
        print("Wygrał gracz")
    else:
        print("Wygrał komputer")
    play_again()

def compare(playerChoice,cpuChoice):
    results = {('k','n') : True,
               ('k','p') : False,
               ('p','k') : True,
               ('p','n') : False,
               ('n','p') : True,
               ('n','k') : False}
    return results [(playerChoice,cpuChoice)]

play()

Niestety poległem na pętli while, nie rozumiem dlaczego podczas wpisywania innej literki niż k,p,n nie spełnia warunku while tylko Od razu wywalą błąd porównania do słownika
rozchodzi się o linie od 23 do 27, jakieś sugestie?

stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 11 godzin
2

while player_choice != 'k' or 'p' or 'n':

IMHO znaczy while (player_choice != 'k') or 'p' or 'n': - ergo zawsze true. W jezyku logiki masz tutaj p v q v r gdzie dla kazdego wartosciowania sigma, sigma(q) == true

Sprobuj player_choice not in ['k', 'p', 'n']
Update: player_choice not in rock_stone_scissors

I nie wiem po co ten if w whilu...


λλλ
edytowany 8x, ostatnio: stivens
warjatt11
:OO teraz działa jak należy, ifa dodałem już chyba w akcie desperacji bo nie potrafiłem sobie w żaden sposób z tym poradzić i szukałem na siłe jakiegoś rozwiązania, dzięki za pomoc:)
stivens
Bodajze w Perlu by taki zapis przeszedl :D ale tworca Perla - Larry Wall - jest lingwista i widocznie sie na logice nie zna. Nie polecam :D
warjatt11
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 2 lata
  • Postów:10
0

Program skończony, dodałem do niego jeszcze punktacje. Jestem usatysfakcjonowany jego działaniem.

Kopiuj
import random
import sys

player_score = 0
cpu_score = 0
rock_stone_scissors = ['k','p','n']

def play_again():
    answer = input("Czy chcesz zagrać jeszcze raz? y/n : ")
    while answer != "y":
        if answer == 'n':
            print("Dziękuje za gre! Zamykam program")
            print("Liczba punktów gracza: ",player_score)
            print("Liczba punktów komputera: ",cpu_score)
            if player_score > cpu_score:
                print("Wygrywa gracz")
            else:
                print('Wygrywa komputer')
            sys.exit()
        else:
            print("Nie można udzielić takiej odpowiedzi!")
            answer = input("Czy chcesz zagrać jeszcze raz? y/n : ")
    play()

def nameIT(ItemSymbol):
    if (ItemSymbol == 'k'): return 'kamień'
    if (ItemSymbol == 'p'): return 'papier'
    if (ItemSymbol == 'n'): return 'nożyce'

def play():
    global player_score, cpu_score
    player_choice = input("Wybierz kamień[k], papier[p] lub nożycze[n] : ")
    while player_choice not in ['k', 'p', 'n']:
        player_choice = input("Wybierz jeszcze raz: kamień[k], papier[p] lub nożycze[n] : ")
    cpu_choice = random.choice(rock_stone_scissors)
    print('Gracz : ',nameIT(player_choice))
    print("Komputer : ",nameIT(cpu_choice))
    if nameIT(player_choice) == nameIT(cpu_choice):
        print("Remis")
    elif compare(player_choice,cpu_choice):
        print("Wygrał gracz")
        player_score +=1
    else:
        print("Wygrał komputer")
        cpu_score +=1
    play_again()

def compare(playerChoice,cpuChoice):
    results = {('k','n') : True,
               ('k','p') : False,
               ('p','k') : True,
               ('p','n') : False,
               ('n','p') : True,
               ('n','k') : False}
    return results [(playerChoice,cpuChoice)]

play()
DO
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:1
0

Zrobił by ktoś w windows form ? taką gre ?

XardasLord
  • Rejestracja:ponad 11 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Gdańsk
  • Postów:271
0
DawciOO napisał(a):

Zrobił by ktoś w windows form ? taką gre ?

Mogę zrobić za 199zł


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)