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

Python - użycie modułu replace()

Object Storage Arubacloud
0 głosów
4,887 wizyt
pytanie zadane 20 grudnia 2015 w Python przez Kapi2222 Obywatel (1,220 p.)
zmienione kategorie 20 grudnia 2015 przez szmq

Witam! :) Mam do zrobienia zadanie w którym mam podaną jakąś liczbę np. 145.253,18. I w tym zadaniu tam ,gdzie jest kropka trzeba zrobić przecinek ,a tam gdzie jest przecinek trzeba zrobić kropkę :D Dla was pewnie banalne zadanie ale dla początkującego jak ja troszkę uciążliwe :D

Samemu stworzyłem takie coś (dodam ,że ta zmienna jest stringiem a nie intem :))

def zamiana(data):

    for i in data:
        if "," in data:
            return data.replace("," , ".")

        elif "." in data:
            return data.replace("." , ",")
    return text

Problem właśnie w tym ,że kropki mi nie chce zamieniać :D Wiem czemu ,bo najpierw zaminiam przecinek na kropke i spowrotem :P Tylko właśnie nie wiem jak mam te dwa warunki ze sobą rozdzielić aby się one nie wykluczały. Zrobić inną pętlę czy co? Z góry dziękuję za pomoc i odpowiedzi pozdrawiam :))))

3 odpowiedzi

0 głosów
odpowiedź 20 grudnia 2015 przez szmq Pasjonat (22,770 p.)
edycja 20 grudnia 2015 przez szmq

W pętli zamiast in data sprawdzasz in i. Bo iteracja dot. zmiennej i. To zmienna i iterujesz względem ilości znaków w zmiennej data. Wrzuć kod i sprawdź wynik :)


data = 145.253,18
data = str(data)

for i in data:
    if '.' in i:
        print(data.replace(".", ","))
    elif ',' in i:
    	print(data.replace(",", "."))

 

komentarz 20 grudnia 2015 przez Michał628496 Pasjonat (17,340 p.)

W linijce 1 powinno być w cudzysłowie , bo inaczej tworzysz krotkę wink

komentarz 20 grudnia 2015 przez szmq Pasjonat (22,770 p.)
w 1 wierszu? Zauważ, że w 2 robię konwersję. Btw. krotki replace to Ci nie puści :P
komentarz 20 grudnia 2015 przez Michał628496 Pasjonat (17,340 p.)
Tak , robisz konwersję. Z krotki na łańcuch :)

Zauważ że 145.243,18 to jest to samo co :(145.243,18)

Wpisz to w Interpreter Pythona ;)

zmienna data przyjmie wartość : '(145.243,18)'

:)
komentarz 20 grudnia 2015 przez szmq Pasjonat (22,770 p.)
dlatego zrobiłem konwersje xd
komentarz 20 grudnia 2015 przez Michał628496 Pasjonat (17,340 p.)
to lepiej zapisz w cudzysłowie :)

Bo się zdziwisz jak zobaczysz nawiasy choć ich nie było ;)
0 głosów
odpowiedź 20 grudnia 2015 przez Tomatosoup Pasjonat (18,530 p.)

Cała ta twoja pętla 'for i in data' jest niepotrzebna, tak samo jak warunek. Po pierwsze, data.replace() operuje na całym stringu tak więc iteracja po kolejnych znakach jest zbędna. If też, ponieważ jeżeli nie ma danego znaku ( tutaj "," ) to nie będzie co zamienić więc funkcja replace() się nie wykona.

def zamiana(data):
	data = data.replace(",", "[]")
	data = data.replace(".", ",")
	data = data.replace("[]", ".")
	return data

Nawiasy kwadratowe możesz zastąpić czym chcesz, po prostu tym czego na pewno nie znajdziesz w twoim stringu, podejrzewam że to liczba przestawiona jako string więc mogą być.

komentarz 20 grudnia 2015 przez Strategiusz Dyskutant (9,220 p.)
edycja 20 grudnia 2015 przez Strategiusz
Te "data" to string czy tablica stringów?

Edit: dobra, widzę, że chodzi o string, tylko że kropka i przecinek mogą występować równocześnie. Ale niestety nie mam opcji kasacji odpowiedzi, a widzę, że poprawna już zdążyła paść, więc zamieniam odpowiedź w komentarz pod poprawną odpowiedzią.
0 głosów
odpowiedź 20 grudnia 2015 przez Michał628496 Pasjonat (17,340 p.)

klauzula "in" sprawdza czy podany element zawiera się w drugim,

W Twoim przypadku sprawdzasz czy zmienna data zawiera przecinek.

Jeśli zawiera przecinek to nie wykona się instrukcja elif .

 Po za tym w linijce 9 zwracasz zmienną text , która nie isntnieje ;)

Ja bym zrobił tak:

1. Zamienić kropki metodą replace na jakiś znak który nie będzie występował w podanej zmiennej np na podkreślenie.

2. Zamienic przecinki na kropki

3. Zamienić podkreślenia na przecinki

 

komentarz 20 grudnia 2015 przez Michał628496 Pasjonat (17,340 p.)

czyli np. tak:

def zamien(data):
  data = str(data) #Na wszelki wypadek :)
  data = data.replace(".","_") #kropka na podkreślenie
  data = data.replace(",",".") #przecinek na kropkę
  data  = data.replace("_",",") #podkreślenie na przecinek

  return data

 

I tyle :)

 

Podobne pytania

0 głosów
3 odpowiedzi 537 wizyt
pytanie zadane 6 października 2018 w Python przez Deriquest Użytkownik (550 p.)
0 głosów
1 odpowiedź 210 wizyt
pytanie zadane 1 czerwca 2023 w Python przez wojtek_programista Nowicjusz (170 p.)
0 głosów
0 odpowiedzi 280 wizyt
pytanie zadane 29 stycznia 2023 w Python przez Kubas23 Użytkownik (630 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!

...