Napisz program, który wypisze wszystkie znaki w podanym łańcuchu aż do napotkania cyfry. Przetestuj swój program dla danych:
Linia 1. ciag znak równości cudzysłów asfkbahwdkcvkjxheewid1fdsf cudzysłów.
ciag = "asfkbahwdkcvkjxheewid1fdsf"
Specyfikacja problemu:
Dane:
ciag – łańcuch znaków zawierający co najmniej jedną cyfrę
Wynik:
napis – łańcuch znaków będący prefiksem łańcucha ciag, zwierającym wszystkie znaki od początku aż do napotkania cyfry.
R1I1gmjcpVKLi
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Linia 1. napis znak równości cudzysłów cudzysłów.
Linia 2. ciag znak równości cudzysłów asfkbahwdkcvkjxheewid1fdsf cudzysłów.
Linia 4. for i in range otwórz nawias okrągły len otwórz nawias okrągły ciag zamknij nawias okrągły zamknij nawias okrągły dwukropek.
Linia 5. kratka Bez używania isdigit w instrukcji warunkowej dwukropek.
Linia 6. kratka if 0 otwórz nawias ostrokątny znak równości ord otwórz nawias okrągły ciag otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły minus ord otwórz nawias okrągły apostrof 0 apostrof zamknij nawias okrągły otwórz nawias ostrokątny znak równości 9 dwukropek.
Linia 7. if ciag otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka isdigit otwórz nawias okrągły zamknij nawias okrągły dwukropek.
Linia 8. break.
Linia 10. napis plus znak równości ciag otwórz nawias kwadratowy i zamknij nawias kwadratowy.
Linia 12. print otwórz nawias okrągły napis zamknij nawias okrągły.
napis = ""
ciag = "asfkbahwdkcvkjxheewid1fdsf"
for i in range(len(ciag)):
# Bez używania isdigit w instrukcji warunkowej:
# if 0 <= ord(ciag[i]) - ord('0') <= 9:
if ciag[i].isdigit():
break
napis += ciag[i]
print(napis)
21
Ćwiczenie 2
Napisz program, który wypisze wszystkie operatory arytmetyczne występujące w przekazanym wyrażeniu w postaci łańcucha znaków, bez spacji między nimi. Przetestuj swój program dla następujących danych:
Linia 1. wyrazenie znak równości cudzysłów otwórz nawias okrągły 3 prawy ukośnik 4 asterysk 9 zamknij nawias okrągły minus 4 plus 8 prawy ukośnik 9 cudzysłów.
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Linia 1. napis znak równości cudzysłów cudzysłów.
Linia 2. wyrazenie znak równości cudzysłów otwórz nawias okrągły 3 prawy ukośnik 4 asterysk 9 zamknij nawias okrągły minus 4 plus 8 prawy ukośnik 9 cudzysłów.
Linia 4. for i in range otwórz nawias okrągły len otwórz nawias okrągły wyrazenie zamknij nawias okrągły zamknij nawias okrągły dwukropek.
Linia 5. znak znak równości wyrazenie otwórz nawias kwadratowy i zamknij nawias kwadratowy.
Linia 7. if znak znak równości znak równości apostrof plus apostrof or znak znak równości znak równości apostrof minus apostrof or znak znak równości znak równości apostrof asterysk apostrof or znak znak równości znak równości apostrof prawy ukośnik apostrof dwukropek.
Linia 8. napis plus znak równości znak.
Linia 10. print otwórz nawias okrągły napis zamknij nawias okrągły.
napis = ""
wyrazenie = "(3/4*9)-4+8/9"
for i in range(len(wyrazenie)):
znak = wyrazenie[i]
if znak == '+' or znak == '-' or znak == '*' or znak == '/':
napis += znak
print(napis)
31
Ćwiczenie 3
Napisz program, który zamienia wyrażenie arytmetyczne zapisane w notacji ONP na notację klasyczną i wypisuje je w jednym wierszu. Wyrażenie w notacji klasycznej zapisane w wynikowym łańcuchu znaków powinno być wydzielone parą nawiasów okrągłych (to znaczy ma występować pełne nawiasowanie), a między operandami i operatorami powinien występować znak spacji. Zakładamy, że operatory są wyłącznie jednoznakowe.
Przetestuj swój program dla następujących danych:
Linia 1. notacja podkreślnik onp znak równości cudzysłów 15 9 asterysk 25 6 plus asterysk 27 kareta cudzysłów.
notacja_onp = "15 9 * 25 6 + * 27 ^"
Specyfikacja problemu:
Dane:
notacja_onp – niepusty ciąg znaków, wyrażenie arytmetyczne zapisane w notacji postfiksowej, gdzie dozwolonymi znakami są dowolne liczby naturalne oraz operatory: dodawania (+), odejmowania (-), mnożenia (*) i dzielenia (/), potęgowania (^)
Wynik:
klasyczna – wyrażenie arytmetyczne zamienione na notację klasyczną z pełnym nawiasowaniem; niepusty ciąg znaków
Rm35y02ERKsnG
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Linia 1. notacja podkreślnik onp znak równości cudzysłów 15 9 asterysk 25 6 plus asterysk 27 kareta cudzysłów.
Linia 3. def notacja podkreślnik klasyczna otwórz nawias okrągły notacja podkreślnik onp dwukropek str zamknij nawias okrągły dwukropek.
Linia 4. klasyczna znak równości cudzysłów cudzysłów.
Linia 6. if len otwórz nawias okrągły notacja podkreślnik onp zamknij nawias okrągły otwórz nawias ostrokątny znak równości 1 dwukropek.
Linia 7. return notacja podkreślnik onp.
Linia 9. stos znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy.
Linia 10. obecna podkreślnik liczba znak równości cudzysłów cudzysłów kratka zmienna dla przechowywania operandu.
Linia 11. indeks znak równości 0 kratka indeks obecnie analizowanego znaku.
Linia 13. while indeks otwórz nawias ostrokątny len otwórz nawias okrągły notacja podkreślnik onp zamknij nawias okrągły dwukropek.
Linia 14. if notacja podkreślnik onp otwórz nawias kwadratowy indeks zamknij nawias kwadratowy znak równości znak równości apostrof apostrof dwukropek kratka napotykając spację możemy ją pominąć.
Linia 15. indeks plus znak równości 1.
Linia 16. continue.
Linia 18. if not notacja podkreślnik onp otwórz nawias kwadratowy indeks zamknij nawias kwadratowy kropka isdigit otwórz nawias okrągły zamknij nawias okrągły dwukropek kratka jeżeli znak nie jest cyfrą przecinek to jest operatorem.
Linia 20. operand podkreślnik 2 znak równości stos kropka pop otwórz nawias okrągły zamknij nawias okrągły kratka pobieramy ze stosu 2 operandy.
Linia 21. operand podkreślnik 1 znak równości stos kropka pop otwórz nawias okrągły zamknij nawias okrągły.
Linia 22. operator znak równości notacja podkreślnik onp otwórz nawias kwadratowy indeks zamknij nawias kwadratowy kratka zapisujemy operator do zmiennej.
Linia 24. stos kropka append otwórz nawias okrągły cudzysłów otwórz nawias okrągły cudzysłów plus operand podkreślnik 1 plus cudzysłów cudzysłów plus operator plus cudzysłów cudzysłów plus operand podkreślnik 2 plus cudzysłów zamknij nawias okrągły cudzysłów zamknij nawias okrągły.
Linia 25. indeks plus znak równości 1.
Linia 27. else dwukropek kratka jeżeli jest to cyfra przecinek to zapisujemy całą tę liczbę do.
Linia 28. while indeks otwórz nawias ostrokątny len otwórz nawias okrągły notacja podkreślnik onp zamknij nawias okrągły and notacja podkreślnik onp otwórz nawias kwadratowy indeks zamknij nawias kwadratowy kropka isdigit otwórz nawias okrągły zamknij nawias okrągły dwukropek kratka zmiennej apostrof obecna podkreślnik liczba apostrof.
Linia 29. obecna podkreślnik liczba plus znak równości notacja podkreślnik onp otwórz nawias kwadratowy indeks zamknij nawias kwadratowy.
Linia 30. indeks plus znak równości 1.
Linia 32. stos kropka append otwórz nawias okrągły obecna podkreślnik liczba zamknij nawias okrągły kratka następnie umieszczamy liczbę na stosie.
Linia 33. obecna podkreślnik liczba znak równości cudzysłów cudzysłów.
Linia 35. klasyczna znak równości stos kropka pop otwórz nawias okrągły zamknij nawias okrągły.
Linia 36. return klasyczna.
Linia 38. print otwórz nawias okrągły notacja podkreślnik klasyczna otwórz nawias okrągły notacja podkreślnik onp zamknij nawias okrągły zamknij nawias okrągły.
notacja_onp = "15 9 * 25 6 + * 27 ^"
def notacja_klasyczna(notacja_onp: str):
klasyczna = ""
if len(notacja_onp) <= 1:
return notacja_onp
stos = []
obecna_liczba = "" # zmienna dla przechowywania operandu
indeks = 0 # indeks obecnie analizowanego znaku
while indeks < len(notacja_onp):
if notacja_onp[indeks] == ' ': # napotykając spację możemy ją pominąć
indeks += 1
continue
if not notacja_onp[indeks].isdigit(): # jeżeli znak nie jest cyfrą, to jest operatorem
operand_2 = stos.pop() # pobieramy ze stosu 2 operandy
operand_1 = stos.pop()
operator = notacja_onp[indeks] # zapisujemy operator do zmiennej
stos.append("(" + operand_1 + " " + operator + " " + operand_2 + ")")
indeks += 1
else: # jeżeli jest to cyfra, to zapisujemy całą tę liczbę do
while indeks < len(notacja_onp) and notacja_onp[indeks].isdigit(): # zmiennej 'obecna_liczba'
obecna_liczba += notacja_onp[indeks]
indeks += 1
stos.append(obecna_liczba) # następnie umieszczamy liczbę na stosie
obecna_liczba = ""
klasyczna = stos.pop()
return klasyczna
print(notacja_klasyczna(notacja_onp))