Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

Pętla for z dwoma warunkami

Idź do strony Poprzedni  1, 2, 3  Następny

 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Python
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Caporeira



Dołączył: 26 Lis 2015
Posty: 49

PostWysłany: Czw Lut 25, 2016 4:57 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Też nie działa :(

Cytat:
if [sheet.cell(row=j, column=1).value] in elem.keys():
TypeError: unhashable type: 'list'
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Czw Lut 25, 2016 5:02 pm      Temat postu: Odpowiedz z cytatem Pisownia

Hmmm,
zadeklarowałeś zmienną elem jako słownik ? czyli elem={} ??

_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
Caporeira



Dołączył: 26 Lis 2015
Posty: 49

PostWysłany: Czw Lut 25, 2016 8:40 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Zadziałało :) O taki efekt mi chodziło (podział), lecz chciałem to zrobić na tablicach - bo jako tako je ogarniam :)

Te słowniki to dla mnie nowość, także muszę się z tym tematem jeszcze obeznać.

W przypadku tablic zrobił by to tak:

Kod:
for i in range(0, len(elem[1])):
    print(i)


I wyświetlę wyniki dla warunku 'K006'

A z tego co wyczytałem to na słowniku nie mogę tego tak wyświetlić. Tz aby wyświetlić wyniki z 'K006' ?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Czw Lut 25, 2016 8:47 pm      Temat postu: Odpowiedz z cytatem Pisownia

Możesz wyświetlić elementy słownika, są one tablicami... jeżeli chcesz powyświetlać poszczególne elementy tablic to musisz zrobić mniej więcej taką pętelkę:
Kod:

for i in V.keys():
   for j in V[i]:
      print(j)


gdzie V jest słownikiem, w którym każdemu kluczowi przyporządkowujemy tablicę odpowiadających mu wartości. Spróbuj potestować tą pętelkę na swoim przykładzie... to nie jest trudne, ale wymaga czasu, aby to sobie przyswoić na przyzwoitym, praktycznym poziomie... :)

_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
Caporeira



Dołączył: 26 Lis 2015
Posty: 49

PostWysłany: Pon Lut 29, 2016 2:43 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Z wszystkich wskazuwek skorzystałem i działa jak tego oczekiwałem.

Ale teraz napotkałem na kolejny problem. Mianowicie,
jak pętla wykona pierwszy warunek "if" to wynik zapisze do zmiennej "light".
W przypadku kolejnego wykonania tej samej instrukcji zmienna zostaje nadpisana.
Dlatego chciałbym wszystkie wyniki z drugiej pętli for (for i in range(len(elem[result[j]])):) zapisać do jednej zmiennej (dodając te wyniki do siebie jak stringi), lub do pliku.

Czyli, załóżmy że:
- if '-BG' wykona się 3 razy
- elif '-MB' - wykona się 2 razy
- elif '-KG' - wykona się raz

To będzie coś takiego wyglądało:

open('temp.xml', "a").write() = light + light + light + magnetic + magnetic + scan
i zapisać to jako result[j].xml

Kod:
for j in range(len(elem.keys())):
    
        for i in range(len(elem[result[j]])):
                              
                if '-BG' in elem[result[j]][i]:
                        light2 = elem[result[j]][i]
                        light = light1 + light2 + light3
                                          
                elif '-MB' in elem[result[j]][i]:
                        magnetic2 = elem[result[j]][i]
                        magnetic = magnetic1 + magnetic2 + magnetic3

                elif '-KG' in elem[result[j]][i]:
                        scan = elem[result[j]][i]
                else:
                        print('Cos poszlo nie tak')
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Pon Lut 29, 2016 2:53 pm      Temat postu: Odpowiedz z cytatem Pisownia

wrzuć wszystkie elementy po kolei do tablicy i skorzystaj z funkcji join, pzdr. :)
_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
Caporeira



Dołączył: 26 Lis 2015
Posty: 49

PostWysłany: Wto Mar 01, 2016 8:51 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Dzięki, powrzucałem te elementy do tablicy. Ale niestety nie udało mi się osiągnąć to czego chciałem.

Za to poradziłem sobie z tym w inny sposób, wyniki zapisałem do plików i potem z plików odczytałem.
Pewnie niedługo zapiszę to do zmiennych ... jak będę bieglej władał językiem :)

Mam jeszcze pytanie, potrzebuje więcej wartości dopisać do słownika i rozbudowałem to co mi napisałeś o parametr "addresse". Ale możesz mi powiedzieć co takiego robi krok po warunki else ? Czyli co robią te 2 ostatnie linijki kodu ?

Kod:
elem={}
addresse={}

for j in range(1, row_count):
    for k in range(0, len(result)):
        if sheet.cell(row=j, column=1).value in result[k]:
            name = sheet.cell(row=j, column=3).value[3:]
            adres = sheet.cell(row=j, column=5).value
            if  sheet.cell(row=j, column=1).value in elem.keys():
                elem[sheet.cell(row=j, column=1).value].append(name)
                addresse[sheet.cell(row=j, column=1).value].append(adres)
            else:
                 elem[sheet.cell(row=j, column=1).value]=[name]
                 addresse[sheet.cell(row=j, column=1).value]=[adres]


PS. Jak zmienić kolor czcionki w consoli, tz ten co chce wyświetlić komendą "print". Próbowałem dwóch sposobów i się nie udało.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Sro Mar 02, 2016 10:27 am      Temat postu: Odpowiedz z cytatem Pisownia

spróbuj przetestować kod:
Kod:

V={}
print(V)
V[1]=[]
print(V)
V[1].append(2016)
print(V)
V[2]=[]
print(V)
print(V.keys())
V[3].append(2017)


następnie przeanalizuj ten kod, przeanalizuj swój kod... i spróbuj wyciągnąć wnioski...

_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
Caporeira



Dołączył: 26 Lis 2015
Posty: 49

PostWysłany: Czw Mar 03, 2016 1:08 am  OP    Temat postu: Odpowiedz z cytatem Pisownia

Tę część rozumiem. Że dodawane są elementy do słownika.

Niejasna jest dla mnie ta część, tutaj nie występuje append, tylko jedynie przypisanie (jeśli nie jest spełniony warunek to to przypisz wartość komórki do ?) :

else:
elem[sheet.cell(row=j, column=1).value]=[name]
addresse[sheet.cell(row=j, column=1).value]=[adres]

i też nie wiem jak ją przerobić/dopasować do Twojego przykładu.

Chciałem rozbudować o kolejną wartość, ale już się tak łatwo nie da:
Kod:
            name = sheet.cell(row=j, column=3).value[3:]
            adres = sheet.cell(row=j, column=5).value
            inout = sheet.cell(row=j, column=6).value
            if  sheet.cell(row=j, column=1).value in elem.keys():
                elem[sheet.cell(row=j, column=1).value].append(name)
                addresse[sheet.cell(row=j, column=1).value].append(adres)
                inout[sheet.cell(row=j, column=1).value].append(inout)
            else:
                 elem[sheet.cell(row=j, column=1).value]=[name]
                 addresse[sheet.cell(row=j, column=1).value]=[adres]
                 inout[sheet.cell(row=j, column=1).value]=[inout]


inout[sheet.cell(row=j, column=1).value]=[inout]
TypeError: 'str' object does not support item assignment

albo to:

inout[sheet.cell(row=j, column=1).value].append(inout)
TypeError: string indices must be integers

Tę komórkę trzeba przekonwertować na integer ?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Czw Mar 03, 2016 1:42 am      Temat postu: Odpowiedz z cytatem Pisownia

potestuj mój przykładowy kod, swój kod, jeżeli jest potrzeba wprowadź do jednego i drugiego kodu zmiany, aby zobaczyć jak kody działają (jak masz problem ze zrozumieniem przetestuj swój kod na mniejszej ilości danych, wciśnij gdzie się da print i analizuj, analizuj, analizuj...) pomyśl nad tym ciut... i odezwij się najwcześniej w poniedziałek... :) chcę Ci dać trochę czasu na ogarnięcie problemu... :) programowania nie da się nauczyć w tydzień... :) z tego co widzę, to masz problem ze zrozumieniem podstaw... :)
_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Python Wszystkie czasy w strefie CET (Europa)
Idź do strony Poprzedni  1, 2, 3  Następny
Strona 2 z 3

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.14915 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |