Początki z Pytonem, programowanie od podstaw.

0

Zaczynam dopiero naukę programowania w Pytonie i napotkałem problem. Ćwiczenia i próby wykonywałem w Pychram, ale przestał działać. przeinstalowałem i nadal nic. Skrypty pisać można ale już nic poza tym się nie dzieje, tym bardziej, że te skrypty skopiowanie do innego środowiska działają, co z tym zrobić?

3

Próbowałeś dokonać deinstalacji zgodnie z instrukcją?
https://www.jetbrains.com/help/pycharm/uninstall.html

Spróbuj też użyć przenośnej wersji PyCharma: https://portableapps.com/node/56602

0

Dziękuję zaraz to wypróbuje, ale tym czasem mam inny problem , ćwiczenia z lekcji wykonywałem w Mu z barku czegoś innego i program się nie wykonuje, choć błędu znaleźć nie potrafię, proszę o pomoc

.from random import randint

los = (randint(1,10))
odp = -1
i = 0
print ("Zgadnij liczbę od 1 - 10")

while odp != los:
    i += 1
    odp = int (input("Podaj liczbę: "))
    if odp > od los:
        print("Niestety wylosowana liczba jest mniejsza od twojej")
    elif odp < od los:
        print("Niestety wylosowana liczba jest większa od twojej")
print("Brawo , odgadłeś za ,i, razem")
0

@Romuald Łukomski:
Zapewne problemen jest linia 11 i linia 13, co to znaczy, że jestem jakieś "od"?
Tak samo linia 1
from random import randint, ta kropka tam jest zbędna. :)

Co to znaczy, że w Pycharmie nic się nie dzieje? Jak to rozumieć? Jakiś błąd? Jakie kroki wykonujesz?

1

Proszę spróbować tak:

from random import randint

los = randint(1,10)
odp = -1
i = 0
print("Zgadnij liczbę od 1 - 10")

while odp != los:
    i += 1
    odp = int(input("Podaj liczbę: "))
    if odp > los:
        print("Niestety wylosowana liczba jest mniejsza od twojej")
    elif odp < los:
        print("Niestety wylosowana liczba jest większa od twojej")
print("Brawo , odgadłeś za", i, "razem")
2

Na poczatku lepiej jest uzywac narzedzi konsolowych plus zwykly edytor tekstu (np geany, visual studio code, atom, notepad++).
Dzieki temu mozesz skopiowac rozwiazanie w formie komendy z netu i jest niezerowa szansa ze zadziala.

IDE jak PyCharm czy Eclipse poczatkujacemu wiecej sprawia problemow niz to warte.

0

W odpowiedzi "Jak nie zadziałało, nic się nie wyświetliło czy jest jakiś błąd? — randomize111 2022-04-12 22:45"
Tak wygląda konsola po uruchomieniu skryptu:
screenshot-20220413100930.jpg

1

@Romuald Łukomski: Pewnie w ustawieniach projektu masz napisane, żeby uruchamiany był plik main.py, a Ty zmieniłeś jego nazwę na operatory logiczne.py, w dodatku pewnie nie przez IDE, skoro zakładka nazywa się main.py, a w projekcie plik nazywa się inaczej.

Czytaj komunikaty o błędach...

4

@Spine: zobacz że u góry nad importem modułu random jest nazwa pliku main.py - więc w sumie nawet nie wiadomo gdzie ten plik, bo z drzewa projektu widać tylko operatory logiczne.py :D

@Romuald Łukomski: można kliknąć dwukrotnie w ten plik po lewej operatory logiczne.py tak aby się otworzył, następnie tam przekopiować kod i na końcu kliknąć jeszcze raz na operatory logiczne.py tym razem prawym przyciskiem i wybrać "Run"

0

Cześć, znowu mam problem: wykonując ćwiczenie w broszurce Kś str. 21, które wygląda tak:
a=0; b=10
while a<b:
print(a, end=' ')
a += 1

 Skrypt nie dział, co jest źle?
1

te uzycie srednika pomiedzy a i b jest dziwne dla mnie nigdy w zyciu bym tak nie napisal (choc pewnie jest prawidlowe) - tak jak nizej bedzie git

a, b = 0, 10
while a < b:
    print(a, end=' ')
    a += 1
3

No tak, przy tym zapisie, zadziało, tylko nie rozumiem teraz tego zapisu: a, b =0, 10, chodzi mi o to b=0 , 10

To nie jest taki oczywisty zapis w sumie, tam się dzieje coś w miarę ciekawego. Najbardziej podstawowe wytłumaczenie — w Pythonie można nadać wartość kilku zmiennym w jednej linijce, wypisując ich wartości w ten sposób:

pierwsza_zmienna, druga_zmienna, trzecia_zmienna, czwarta_zmienna = 42, "Ala ma kota", 3.14, [1, 2, 3, 4]

Co jest równoważne:

pierwsza_zmienna = 42
druga_zmienna = "Ala ma kota"
trzecia_zmienna = 3.14
czwarta_zmienna = [1, 2, 3, 4]

lub

pierwsza_zmienna = 42; druga_zmienna = "Ala ma kota"; trzecia_zmienna = 3.14; czwarta_zmienna = [1, 2, 3, 4]

Ale dlaczego to działa? Jest to wypadkowa następujących dwóch rzeczy:

Otóż w Pythonie istnieje taka struktura danych, jak krotka (po angielsku — tuple). Jest to niezmienna kolekcja wartości potencjalnie różnych typów. Typowo, zapisuje się ją w nawiasach okrągłych:

krotka = (15, "siała baba mak", -4j)
krotka[1] == "siała baba mak"  # True

ale te nawiasy są nieobowiązkowe tam, gdzie Python może je sam wywnioskować. Zatem dla niego zapis a, b = 0, 10 to to samo, co (a, b) = (0, 10)

Ale to dopiero połowa zagadki. Drugą połową jest kolejna cecha Pythona — ma on uproszczony pattern matching (nie znam polskiego odpowiednika niestety), zwany rozpakowywaniem (unpacking). Jak napotka przypisanie (=), gdzie po obu stronach są pasujące kolekcje (w szczególności — krotki po obu stronach, jak w tym przykładzie), to spróbuje rozpakować jedną do drugiej. Najprostsze zastosowanie to właśnie takie „przepisanie” jeden-do-jednego, wartość po wartości.

Ale możemy to sobie trochę jeszcze wzmocnić — korzystając z *. Zapis *nazwa_zmiennej po lewej stronie takiego przypisania oznacza „wypakuj tu tyle wartości, ile wejdzie”. I tak na przykład:

a, *b, c, d = 1, 2, 3, 4  # a = 1; b = [2]; c = 3; d = 4
a, *b, c, d = 1, 2, 3  # a = 1; b = []; c = 2; d = 3
a, *b, c, d = 1, 2, 3, 4, 5, 6, 7  # a = 1; b = [2, 3, 4, 5]; c = 6; d = 7

EDYCJA:
Może jeszcze warto zauważyć, że to rozpakowywanie odbywa się w ten sposób, że najpierw jest wyznaczana cała krotka po prawej stronie, a dopiero potem następuje rozpakowywanie i przypisywanie wartości. Dlatego taki zapis:

a, b = b, a

będzie działał zgodnie z oczekiwaniami — zamieni nam wartości ab miejscami.

0

Jestem dyletantem, co usprawiedliwi zapewne następne pytanie, ale aby coś zapamiętać, trzeba najpierw zrozumieć. Chodzi mi w tym momencie o skrypt

while a < b:
    print(a, end=' ')
    a += 1

Jak to działa, "end" z apostrofami, itd. czy należy to przyjąć jak "dogmat" i nie wnikać w szczegóły? Ja rozumiem już, ze while - podczas gdy, jeżeli itd, rozumiem "a" i skróconą wersje dodawania, ale zapisu w nawiasie nie rozumiem, domyślam się, że end ma stanowić koniec pętli, ale ta reszta, nic nie wiem. Jeśli to możliwe, proszę o wytłumacz nie.

0
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

Print objects to the text stream file, separated by sep and followed by end. sep, end, file, and flush, if present, must be given as keyword arguments.

Mozesz sobie dla testu wpisac print(a, end="$") zeby zobaczyc co sie stanie :)

0

@Romuald Łukomski: Polecałbym przy takich rzeczach również korzystać z dokumentacji wtedy jeszcze lepiej zrozumiesz co co robi :)

3

@Romuald Łukomski:

Jak to działa, "end" z apostrofami, itd. czy należy to przyjąć jak "dogmat" i nie wnikać w szczegóły? Ja rozumiem już, ze while - podczas gdy, jeżeli itd, rozumiem "a" i skróconą wersje dodawania, ale zapisu w nawiasie nie rozumiem, domyślam się, że end ma stanowić koniec pętli, ale ta reszta, nic nie wiem. Jeśli to możliwe, proszę o wytłumacz nie.

Od tyłu trochę — nie. Pętle w Pythonie się wyróżnia wcięciami, nie słowami kluczowymi (takimi jakim byłby end, gdyby robił to, czego się pan spodziewa, a czego jednak nie robi). Ciałem pętli jest wszystko od momentu jej deklaracji (while a < b:), co ma pasujące wcięcia (więc te dalsze trzy linijki, bo są odpowiednio wcięte). To dlatego tak ważne jest używanie formatującego edytora, by nie mieć problemów z brakującymi/nadmiarowymi wcięciami, które dla Pythona mają olbrzymie znaczenie.

Zapis nawiasowy tego typu, tzn. jakiś_identyfikator(opcjonalnie, rzeczy, w, nawiasie, rozdzielone, przecinkami) (jako że opcjonalnie, to też i jakiś_inny_identyfikator())¹ oznacza coś, co programiści nazywają wywołaniem funkcji². Funkcje, w znaczeniu programistycznym², to takie wydzielone i re-używalne fragmenty kodu, deklarowane — o czym pewnie się pan zaraz z kolejnego odcinka kursu nauczy — przez słowo kluczowe def. Mają one swoje parametry — przyjmują jakieś zmienne i mogą z nich korzystać, modyfikując lub nie swój wynik i zachowanie.

Niektóre funkcje są już zadeklarowane na starcie — można o nich poczytać w dokumentacji Pythona (po angielsku). print jest jedną z nich. Dokumentacja nam pisze, co ta funkcja robi, oraz jakie parametry przyjmuje — tutaj, print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) — oraz co z nimi robi.

Parametry funkcjom możemy dostarczać pozycyjnie — pierwszy parametr przy deklaracji dostanie referencję do pierwszego parametru przy wywołaniu, drugi do drugiego, a siedemnasty do siedemnastego, itd.; albo po nazwach — jak piszemy jakaś_funkcja(jakiś_parametr=42), to wtedy jakiś_parametr w tej funkcji dostanie 42. Warto zauważyć, że w tej deklaracji print już pierwszy parametr ma gwiazdkę * przed nazwą — a to działa tak, jak wyżej, gdzie pisałem o krotkach, tzn. „połyka” tyle wartości, ile jest w stanie. Co za tym idzie, kolejne parametry nie będą nigdy dostępne pozycyjnie — wszystkie pozycje już nam *objects „połknie” — ale będą dostępne po nazwach. Zatem możemy wywołać print dostarczając mu jakieś obiekty, oraz te parametry. Na przykład tak, jak u pana — print(a, end=' ') sprawi, że w parametrze *objects wyląduje krotka tych pozycyjnych — czyli (a,) — a w nazwanym end — wartość przypisana, czyli string złożony z samej spacji ' '.

Co te parametry robią i po co, wyczyta pan w dokumentacji zalinkowanej wyżej. Warto też sobie przetestować samemu, co zrobi print(1, 2, 3, 4, sep="separator", end="koniec")


¹ W odróżnieniu od nawiasów okrągłych nie poprzedzonych bezpośrednio identyfikatorem, które, jak pisałem wyżej, oznaczają krotkę.
² Nazwanym tak zapewne do konfundowania matematyków — bo z funkcją to wiele wspólnego nie ma, (ograniczonymi) funkcjami w Pythonie są słowniki (ang. dictionaries)… 🙄

0

Powracam z kolejnym problemem, realizuję kurs w Codenga i pojawił się problem z rozwiązaniem zadania, po prostu go nie rozumiem. Są to dwa przykłady: score = 0
task_finished = True
if task_finished == True:
score = 100
else:
score = 0 print(score) print wdaje 100, ale czemu?
i drugi :wynik podaje 5, też nie wiem czemu. Proszę o pomoc w zrozumieniu. Tam wprawdzie można zadać pytanie, ale jak do tej pory nikt nie odpowiedział.
screenshot-20220423172221.jpg

3
score = 0
task_finished = True
if task_finished == True:
  score = 100
else:
  score = 0 
print(score)

czyli:

  1. przypisz do zmiennej score wartość 0
  2. przypisz do zmiennej task_finished wartość True
  3. jeżeli task_finished równa się True (co jest prawdą, bo to ustawiliśmy), to wykonaj:
    • (i to się wykonuje) score = 100, czyli ustawiamy zmienną score na 100
  4. w przeciwnym wypadku (else:), tj. gdyby task_finished nie równał się True
    • wykonałaby się instrukcja score = 0, ale ona się nie wykona
  5. wyświetl zmienną score (czyli 100)

1 użytkowników online, w tym zalogowanych: 0, gości: 1