python: rovnaká matem. operacia na skupine premennych

Sekcia: Programovanie 23.03.2009 | 13:29
Peter S.   Návštevník
Ahoj,
povedzme, že mám 5 premenných, nazveme ich A,B,C,D,E a chcem na každej z nich urobiť nejakú operáciu, napríklad
if A < 5:
.....A = A * 1.3
if A > 50:
.....A = 50

(Bodky sú namiesto tabulátora)
Teda nechcem mať 20 riadkov ktoré sa v zásade opakujú... ako na to?
    • Re: python: rovnaká matem. operacia na skupine premennych 23.03.2009 | 18:09
      Avatar Marián Sova Ubuntu 10.10  Používateľ
      Uložiť ich do listu a použiť na to for cyklus.
      Čo ťa nezabije, to ťa posilní | Leták na propagáciu jabbera v pdf | www.mikroprocesory.sk
      • Re: python: rovnaká matem. operacia na skupine premennych 24.03.2009 | 10:46
        Peter S.   Návštevník
        Takto to nejde. Aby bolo jasné, chcem aby sa zmenila hodnota tých premenných. Ked to dám do cyklu tak to zoberie hodnotu premenných, urobí s nou čo mu poviem, ale neviem ako tu novú hodnotu uložiť naspäť do premennej...
        • Re: python: rovnaká matem. operacia na skupine premennych 24.03.2009 | 11:17
          Avatar georw Ubuntu 12.04  Používateľ
          toto nefunguje?:

          >>> t = 12345, 54321
          >>> u = t, 888
          >>> u[0][0] = u[0][0] * 1.3
          >>> t


          nemam to teraz ako otestovat
          • Re: python: rovnaká matem. operacia na skupine premennych 24.03.2009 | 11:37
            Avatar georw Ubuntu 12.04  Používateľ
            takze takto:

            >>> a = [1]
            >>> b = a, [2]
            >>> b
            ([1], [2])
            >>> b[0][0] = 5
            >>> a
            [5]
            • Re: python: rovnaká matem. operacia na skupine premennych 24.03.2009 | 13:23
              Peter S.   Návštevník
              sorry, jednak tomu úplne nerozumiem a okrem toho nie som si istý, že je to čo chcem

              povedzme že máš 5 premenných
              A,B,C,D,E = 1,3,5,7,9
              na každú znich chcem aplikovať toto
              if premenna > 5:
              .....premenna = premenna * 2

              teda výsledok by mal byť
              A,B,C,D,E = 1,3,5,14,18

              neviem to napasovať na tvoje riešenie...
              • Re: python: rovnaká matem. operacia na skupine premennych 24.03.2009 | 13:53
                Avatar djway UBUNTU 8.10  Používateľ
                nie je to syntax pythona, ale snad pomoze:

                p(1) = 1;
                p(2) = 3;
                p(3) = 5;
                p(4) = 7;
                p(5) = 9;

                for i = 1:(length(p))
                if p(i) > 5
                p(i) = p(i) * 2;
                end
                end
                • Re: python: rovnaká matem. operacia na skupine premennych 24.03.2009 | 14:16
                  Peter S.   Návštevník
                  No takže podstata je, že sa najprv premenne prevedu do zoznamu a po spracovaní sa preklopia späť do premenných. Myslím, že je to OK, ale mohlo to byť aj elegantnejšie. Konkrétne kod vyzerá takto:

                  A,B,C,D,E = 1,3,5,7,9
                  zoznam = [A,B,C,D,E]
                  for i in range(len(zoznam)):
                  .....if zoznam[i] > 5:
                  ..........zoznam[i] = zoznam[i] * 2

                  A,B,C,D,E = zoznam


                  V zásade je to vyriešené, ale ak by niekto vedel o elegantnejšom riešení...
                  • Re: python: rovnaká matem. operacia na skupine premennych 24.03.2009 | 16:51
                    Avatar Marián Sova Ubuntu 10.10  Používateľ
                    Pochybujem, že to pôjde ešte elegantnejšie.
                    Čo ťa nezabije, to ťa posilní | Leták na propagáciu jabbera v pdf | www.mikroprocesory.sk
                  • Re: python: rovnaká matem. operacia na skupine premennych 25.03.2009 | 10:48
                    Avatar georw Ubuntu 12.04  Používateľ
                    preklapat naspat nic nemusis: zoznam[i] = zoznam[i] * 2 tu hodnotu v pythone priradi hned danej premennej ;) Viz moj priklad vyssie.
                    • Re: python: rovnaká matem. operacia na skupine premennych 25.03.2009 | 16:06
                      Peter S.   Návštevník
                      nefunguje to. Ked zmenim skript na:

                      A,B,C,D,E = 1,3,5,7,9
                      zoznam = [A,B,C,D,E]
                      for i in range(len(zoznam)):
                      ..... if zoznam[i] > 5:
                      .......... zoznam[i] = zoznam[i] * 2

                      #A,B,C,D,E = zoznam
                      print A,B,C,D,E


                      tak ten posledný riadok (print) vráti pôvodné hodnoty
                      • Re: python: rovnaká matem. operacia na skupine premennych 25.03.2009 | 16:39
                        Avatar borg Fedora  Administrátor
                        lebo zoznam je vytvoreny kopiami tych premennych
                      • Re: python: rovnaká matem. operacia na skupine premennych 26.03.2009 | 10:53
                        Avatar georw Ubuntu 12.04  Používateľ
                        zoznam = [A],[B],[C],[D],[E]

                        potom:

                        zoznam[i][0] > 5 ...
                        • Re: python: rovnaká matem. operacia na skupine premennych 26.03.2009 | 11:01
                          Avatar georw Ubuntu 12.04  Používateľ
                          este musis assignut hodnoty takto:
                          A,B,C,D,E = [1],[3],[5],[7],[9]
                          • Re: python: rovnaká matem. operacia na skupine premennych 26.03.2009 | 11:29
                            Peter S.   Návštevník
                            Ked upravím skritp takto:

                            A,B,C,D,E = [1],[3],[5],[7],[9]
                            zoznam = [A],[B],[C],[D],[E]
                            for i in range(len(zoznam)):
                            .....if zoznam[i][0] > 5:
                            ..........zoznam[i][0] = zoznam[i][0] * 2

                            #A,B,C,D,E = zoznam
                            print A,B,C,D,E


                            tak stále mi to vracia iba pôvodné hodnoty (ako zoznamy) tak ako su nadefinované v prvom riadku...
                            • Re: python: rovnaká matem. operacia na skupine premennych 26.03.2009 | 11:32
                              Avatar borg Fedora  Administrátor
                              a preco nevypisujes ten zoznam?
                              • Re: python: rovnaká matem. operacia na skupine premennych 26.03.2009 | 13:06
                                Peter S.   Návštevník
                                Viem že v zozname to je zmenené. Ale ja potrebujem aby sa zmenily hodnoty premenných. Kdesi vyššie mi niekto povedal, že riadok
                                A,B,C,D,E = zoznam
                                nie je potrebný. Samozrejme vyzerá to tak že je potrebný...
                                osobne tu nemám žiaden problém, ako som povedal, riešenie uvedené pár postov vyššie je funkčné a vyzerá dobre..