• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

os.system('cls') nie czyści printów w ifie

Object Storage Arubacloud
0 głosów
519 wizyt
pytanie zadane 4 września 2019 w Python przez Czesc Początkujący (430 p.)

Cześć. Próbuję stworzyć jakiegoś RPGa tekstowego. Pewnie go nigdzie nie opublikuję, ale i tak żeby mieć frajdę, to wrzucam tam bardzo dużo, myślę całkiem nieźle napisanej fabuły. Tak czy inaczej - mnóstwo printów.
No i niezbyt estetycznym rozwiązaniem jest pozostawienie wcześniejszych zdarzeń w konsoli.

Przykładowo, mam coś takiego:

import os

print('Krzysztof Krawczyk jest najbardziej uzdolnionym wokalistą na świecie.')
print('Natomiast gitarzystą - Łysy z Kombii')

answer = input('mam rację? [tak/nie]').lower().strip()
if answer == 'tak':
    os.system('cls')
    print('No i dalej jakieś tam printy, dalsze IFy')

Zależy mi na tym, aby po wykonanej akcji przez gracza, wcześniejsze dialogi, monologi, czy inne printy były wyczyszczone z konsoli. W powyższym przypadku, co chcę osiągnąć to :

1) dwa pierwsze printy

2) pytanie wraz z oczekiwaniem na odpowiedź

3) udzielona odpowiedź

4) wyczyszczenie dwóch pierwszych printów, pytania i odpowiedzi

5) i tak w sumie prawie do końca programu

Problem polega na tym, że gdy uruchamiam kod, PyCharm nie wywala żadnego błędu, jednak również nie czyści konsoli. Za to na początku pierwszego printa po rzekomym wyczyszczeniu, pokazuje mi się jakaś strzałka skierowana w górę. Zaraz po niej (w tej samej linii) zawartość printa.

Czy ja robię coś źle? Jeśli tak to co? Mógłby mi ktoś ewentualnie poradzić jak osiągnąć zamierzony efekt? Może w jakiś inny sposób.
Z góry dzięki za odpowiedzi :)

2 odpowiedzi

0 głosów
odpowiedź 5 września 2019 przez zort Bywalec (2,080 p.)
wybrane 7 września 2019 przez Czesc
 
Najlepsza

Albo coś takiego:

 

import os
import time

def convert(x):
    s = [str(i) for i in x]
    res = str("".join(s))
    return (res)

def pause():
    time.sleep(0.5)
    os.system("cls")
    time.sleep(0.5)

def ok():
    time.sleep(0.5)
    print(odpowiedzi[0])
    time.sleep(0.5)

def notok():
    time.sleep(0.5)
    print(odpowiedzi[1])
    time.sleep(0.5)

teksty = ['Krzysztof Krawczyk jest najbardziej uzdolnionym wokalistą na świecie.','Natomiast gitarzystą - Łysy z Kombii']
odpowiedzi = ['To dobrze', 'To zle']

convert(teksty)
convert(odpowiedzi)

for tekst in teksty:
    if tekst == teksty[0]:
        pause()
        print(teksty[0])
        accept = input("Zgadzasz sie?\n")
        pause()
        if accept == "tak":
            ok()
            pause()
        else:
            notok()
            pause()
    if tekst == teksty[1]:
        pause()
        print(teksty[1])

komentarz 6 września 2019 przez Czesc Początkujący (430 p.)

Wielkie dzięki za włożoną pracę w Twoją odpowiedź. Tylko pytanie, czy ten kod również będzie się dobrze sprawdzał przy rzeczywistym tekście.

W sensie - póki co, można powiedzieć, że piszę sobie odpowiadanie. Przy okazji, ubieram je w lekką interaktywność, żeby nie pisać scenariusza "na sucho". I odpowiedzi w inputach będą różne (chyba, że zrobię oczekiwany input powiedzmy od 1 do 4, i te wybory zdefiniuję w tekście inputu), i tekstu do każdego ifa będzie dość sporo.
To może inaczej. Załączę rzeczywisty urywek kodu z mojej "gry". Oczywiście mnóstwo rzeczy tu ma się pozmieniać, i w kodzie, i w fabule. Ale mniejsza o to.

answer = input("No to co? Giercujemy? [tak/nie] -->").lower().strip()
if answer == 'tak':
    print("Jest późny wieczór. Nie jesteś pewien gdzie właściwie się znajdujesz.")
    print("Wokół Ciebie żywe są jedynie mrok i cisza.")
    print("Czujesz lekki ból głowy i nieco mocniejszy strach.")
    print("W oddali, na prawo od siebie dostrzegasz unoszący się i promieniujący purpurowy, jakby magiczny dym.")

    answer = input('Chcesz pójść w prawo (w stronę dymu), czy prosto przed siebie? [prawo/prosto] -->').lower().strip()
    if answer == 'prosto':
        pass
    elif answer == 'prawo':
        print("Zbliżasz się coraz bardziej do mistycznego miejsca.")
        print("Teraz dużo dokładniej możesz obserwować to zadziwiające zjawisko")
        print("Dym promieniuje, niemalże Cię oślepiając. Twój ból głowy, mimo iż jeszcze przed chwilą się nasilał - nagle kompletnie zniknął.")
        print("To zdecydowanie magiczne miejsce.")

        answer = input("Chcesz odpocząć, kontynuując podziwianie tego miejsca? "
                        "Czy może ruszasz wgłąb zjawiska? [odpoczynek/ruch] -->").lower().strip()

        if answer == 'odpoczynek':
            print("Siadasz na ziemi, tępo wpatrując się w tajemniczą mgłę.")
            print("Zaraz! Co to za dźwięk?!")
            print("Mocne uderzenie w tył głowy sprawia, że ta boli Cię dużo bardziej niż wcześniej.")
            print("Jednakże ból nie trwa długo. Po chwili właściwie wcale go nie odczuwasz. I już nigdy nie będziesz.")
            print("Ostatnie, czego doświadczasz to okropny pisk w uszach, i tupot oddalących się stóp")
            sys.exit('Nie żyjesz.')

        elif answer == 'ruch':
            print("Wchodząc głębiej we mgłę, czujesz jak Cię ona pochłania")
            print("Jednak z czasem Twoje zmysły zaczynają wariować.")
            print("Czujesz jakby coś się paliło, słyszysz przeraźliwe odgłosy, mglisty blask zaczyna promieniować o wiele szybciej")
            print("Panicznie obracasz się wokół własnej osi, rozglądając się we wszystkie strony")
            print("Co robisz? Próbujesz zamknąć oczy, skupić się, głęboko oddychać, czy jak najszybciej uciekasz w losowym kierunku?")

            answer = input("[opanowanie/ucieczka]").lower().strip()
            if answer == 'ucieczka':
                pass
            elif answer == 'opanowanie':
                print('Po kilku mocniejszych wdechach i wydechach wszystko wraca do normy.')
                print('Powoli i z opanowaniem otwierasz oczy...')
                print('Magicznego pyłu ani śladu. W zasadzie przez mrok niewiele widzisz, jednak całe miejsce zdaje się wyglądać całkowicie inaczej.')
                print('Nie czujesz powiewu wiatru, za sobą wyczuwasz chłodny mur')

 

Tak więc jest trochę tekstu. I czy faktycznie dodawanie każdego tekstu do tablicy jest warte świeczki?

komentarz 6 września 2019 przez zort Bywalec (2,080 p.)
Zaimplementuj import z pliku csv lub txt. W kodzie zrobi się okropny bałagan. ;)
komentarz 7 września 2019 przez zort Bywalec (2,080 p.)
Jak nie wiesz jak, to śmiało pisz.
komentarz 7 września 2019 przez Czesc Początkujący (430 p.)
Dzięki wielkie. Jakoś na to kompletnie nie wpadłem, żeby zrobić import z pliku.

Prawdopodobnie wiem jak, bo skubnąłem ten dział trochę kiedyś. Ale muszę to sobie odświeżyć. Jeśli jednak nie ogarnę, to napiszę. Skoro już się tak oferujesz ;>
Dzięki raz jeszcze! :)
0 głosów
odpowiedź 5 września 2019 przez zort Bywalec (2,080 p.)

Sieczka, ale możesz wpakować dialogi do tablicy i odwoływać się za pomocą pętli.
Powiedzmy coś takiego:

 

import os
import time

def convert(x):
    s = [str(i) for i in x]
    res = str("".join(s))
    return (res)

teksty = ['Krzysztof Krawczyk jest najbardziej uzdolnionym wokalistą na świecie.','Natomiast gitarzystą - Łysy z Kombii']
lecimy = (convert(teksty))

for tekst in teksty:
    if tekst == teksty[0]:
        os.system("cls")
        time.sleep(0.5)
        print(teksty[0])
        accept = input("Zgadzasz sie?\n")
        time.sleep(0.5)
        os.system("cls")
        if accept == "tak":
            print("TO MIOD")
            time.sleep(0.5)
            os.system("cls")
        else:
            print("To NIE MIOD")
            time.sleep(0.5)
            os.system("cls")
    if tekst == teksty[1]:
        time.sleep(1)
        print(teksty[1])

Podobne pytania

0 głosów
2 odpowiedzi 2,019 wizyt
pytanie zadane 5 lutego 2017 w C i C++ przez WireNess Stary wyjadacz (11,240 p.)
0 głosów
1 odpowiedź 690 wizyt
pytanie zadane 6 czerwca 2019 w C i C++ przez kkajet007 Nowicjusz (180 p.)
0 głosów
2 odpowiedzi 877 wizyt
pytanie zadane 13 stycznia 2016 w C i C++ przez sqbi Początkujący (470 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...