Hei. Minulla olisi ollut tässä pieni laskentaongelma. Kuinka saisin laskettua listalta nuo kolme keskimmäistä lukua yhteen(3+4+5=12)?
elaintarha = [123456] orava=elaintarha[0][2:5] print (orava)
Kiitos
# Lista erotellaan pilkuin elaintarha = [1,2,3,4,5,6] # Yhteenlasku indeksistä 2 indeksiin 4 [2:4 +1] # Voi myös käyttää [2:5], mutta tämä on epälooginen vaikka samaa tarkoittaakin (2:5 laskee alkiot 2-4) orava = sum(elaintarha[2:4 +1]) print (orava)
Hei ja kiitos vastauksesta. Voisiko tuon toteuttaa ilman pilkkuja listassa?
voi toteuttaa, mutta mikäli teet
elaintarha = [123456]
se tarkoittaa että listassa on vain yksi alkio, luku 123456.
Eli jos haluat laskea tuosta keskimmäiset luvut, sinun tulee ensin muuttaa tuo numero merkkijonoksi (nuo numerot ei ole tuossa siis eriteltynä, vaan listassa on yksi luku satakaksikymmentäkolmetuhattaneljäsataaviisikymmentäkuusi), ja ottaa merkkijonosta haluamasi merkit, muuntaa ne yksitellen takaisin numeroiksi (3,4,5) ja laskea yhteen.
Lista menee siis näin:
elaintarha = [123456] # Lista # 0: luku 123456 elaintarha = [10,9,8,7,6,5] # Lista # 0: luku 10 # 1: luku 9 # 2: luku 8 # 3: luku 7 # ... jne
Kiitos vastauksestasi. Voitko kertoa miten käytännössä toimin, kun minulla ei ole pilkkuja listassa, miten siis muutan lukusarjan takaisin merkkijonoksi?
Kiitos
sinulla ei ole lukusarjaa, sinulla on luku. lukusarja erotellaan pilkuin
Tai no, on sinulla lukusarja jossa on yksi alkio, luku jonka arvo on tuo 123456
lukuMerkkijonona = str(lukuJokaHalutaanMuuttaa)
Kanarianlintu kirjoitti:
miten siis muutan lukusarjan takaisin merkkijonoksi?
Todennäköisesti ohjelman suunnittelu on pielessä, jos muuttuja muutetaan toiseksi ja takaisin. Vai tarkoitatko, että merkkijono muutetaan lukusarjaksi ja sitten takaisin joksikin toiseksi merkkijonoksi jotenkin siten, että suora merkkijonon muuttaminen toiseksi merkkijonoksi ei toimi? Olisi kiva nähdä tällaisesta esimerkki.
Jos nyt välttämättä halutaan alkuperäisen kysymyksen mukaisesti laskea yhteen numeroita luvusta, tässä on siihen keino:
def numerosumma(teksti): summa = 0 for numero in teksti: summa += int(numero) return summa print(numerosumma("123")) # 6 print(numerosumma("918231")) # 24 print(numerosumma("918231"[3:])) # "231" -> 6 eläintarha_jossain_oudossa_muodossa = [123456] orava = numerosumma(str(eläintarha_jossain_oudossa_muodossa[0])[2:5]) print(orava)
Todennäköisesti ohjelman suunnittelu on pielessä, jos luvun yksittäisillä numeroilla on erillisiä merkityksiä. Jos on tarkoitus tallentaa joukko numeroita, ne on loogista tallentaa joukkona (set) tai listana (list) tai joissain tilanteissa tekstinä (str).
Kerrataan vielä: 123456 on yksi luku. Ensimmäisen koodin eläintarhassa on siis yksi asia, joka on luku 123456.
Ehkä tämä on helpompi ymmärtää, jos korvataan luku tekstillä:
eläintarha = ["kissakoiraorava"]
Nyt eläintarhassa on yksi asia, joka on teksti kissakoiraorava.
Eläintarha toimisi loogisemmin, kun eläimet olisivat erillisiä:
eläintarha = ["kissa", "koira", "orava"] print(eläintarha[0]) # kissa print(eläintarha[1]) # koira print(eläintarha[2]) # orava
Aihe on jo aika vanha, joten et voi enää vastata siihen.