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

Rozkład String na substringi

Object Storage Arubacloud
0 głosów
93 wizyt
pytanie zadane 8 maja 2018 w Python przez kain Nowicjusz (140 p.)

Cześć, próbuję napisać funkcję, której wejściem jest jakiś wielomian natomiast funkcja ma za zadanie wrzucić jego współczynniki do tablicy, jestem osobą która nigdy wczesniej nie miała doczynienia z pythonem, liznąłem kiedys troszkę c++ i c. Udało mi się napisać taki prymitywny program który bedzie wykonywał to zadanie w pewnym konkretnym przypadku wygląda on tak:
 

def T(w):
    W=str(w)
    m=0
    i = W.count("x")
    tab = []
    while i >= 0:
        tab.append(W[m])
        m+=7
        i-=1
    tab.reverse()

    return tab

 

T("5x^3 + 1x^2 + 4x^1 + 3")



po wpisaniu takiego T(w) działą, jednak jak łatwo się domyślić gdy współczynniki będą liczbą a nie cyfrą to program już ich nie policzy, lub gdy zamiast + bedzie - to też nawali. Chciałem zapytać, czy jest mozliwość zeby ten string podzielić na substringi i wziąć liczby stojące przy x^j? a może ma ktoś z Was inny pomysł na to zadanie? 

Dzięki!

1 odpowiedź

+2 głosów
odpowiedź 8 maja 2018 przez adrian17 Ekspert (344,860 p.)

czy jest mozliwość zeby ten string podzielić na substringi

Jasne, możesz na przykład użyć funkcji... dzielącej - split:

parts = text.split(' + ') # ['5x^3', '1x^2', '4x^1', '3']

Albo wyciągnąć części regexem (który wyciągnie wszystko co wygląda jak ax^y):

parts = re.findall(r'(?:(?:\d+)?x\^)?\d+', text) # ['5x^3', '1x^2', '4x^1', '3']

Można też spróbować od razu wyciągnąć komponenty regexem - ale osobiście bym się wstrzymał, bo w "x^2" z lewej jest "ukryte" 1, którego samymi operacjami na tekście się nie wykryje. Analogicznie, w `2x` jest ukryte "^1".

A propo:

Zamiast tego:

    i = W.count("x")
    while i >= 0:
        # kod
        i-=1

Lepiej uzyć pętlę z użyciem `range`:

    for i in range(W.count('x')):
        # kod

 

komentarz 8 maja 2018 przez kain Nowicjusz (140 p.)
def T(w):
    W=str(w)
    m=0
    tab = []
        for i in range(W.count("x"))
        tab.append(W[m])
        m+=7
    tab.reverse()
return tab
  File "<ipython-input-12-a5f56f8c8888>", line 5
    for i in range(W.count("x"))
    ^
IndentationError: unexpected indent

z tą zmianą while na for cos nie gra :( 

1
komentarz 8 maja 2018 przez adrian17 Ekspert (344,860 p.)
Bo masz o jedno wcięcie za dużo.
komentarz 8 maja 2018 przez kain Nowicjusz (140 p.)
Udało mi się zrobić, że program nadal poprawnie wpisuje nawet gdy wprowadzimy współczynniki wielocyfrowe, jednak gdy zamiast + pojawi się - już się wysypuje, czy jest opcja zeby on rozbijał to gdy pojawia się " + " LUB " - " ?
komentarz 9 maja 2018 przez adrian17 Ekspert (344,860 p.)

Możesz podzielić po `+`, a potem po `-`. Albo po spacjach. Albo wyciągnąć komponenty regexem, jak ja wyżej. Można go nawet rozszerzyć:

>>> text = '5x^3+ 1x^2 - 4x^1 + 3'

>>> re.findall(r'(?:(?:(?:\d+)?x\^)?\d+)|\+|\-', text)
['5x^3', '+', '1x^2', '-', '4x^1', '+', '3']

Jest sporo sposobów na wyciąganie kawałków z tekstu bez ręcznego iterowania po nim :D

Podobne pytania

0 głosów
1 odpowiedź 391 wizyt
pytanie zadane 9 października 2022 w Python przez techno16 Gaduła (4,780 p.)
0 głosów
1 odpowiedź 498 wizyt
0 głosów
2 odpowiedzi 1,136 wizyt
pytanie zadane 14 sierpnia 2016 w Python przez piekarnik Użytkownik (720 p.)

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 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!

...