Kirjoittaja Aihe: Python def funktion kutsuminen, lisäksi random ongelma  (Luettu 4934 kertaa)

asuspoju

  • Käyttäjä
  • Viestejä: 640
  • Linux_Eki useissa verkkopeleissä, palveluissa jne.
    • Profiili
    • Youtube kanavani.
Uusi ongelma: En saa randomilla arvottua lukua jonka minimi ja maksimi haetaan listasta.
idm = random.randrange(0,6)
   string = mlista[idm]
tempdmg = random.randint(string[1],string[2])
Tuo ei toimi. Ei myöskään randrange auta asiaan.
Error by randint: TypeError: cannot concatenate 'str' and 'int' objects
Error by ranrange: invalid literal for int() with base 10: 'i'

Osaisiko joku auttaa  ;)


Wanhaa kamaa alapuolinen.
Koodia: [Valitse]
Eiköhän se ole kutsumista tämä mikä on ongelmana. Käännän vanhaa c# komentorivi peliä pythonille. Aika vähän on pythonista kokemusta joten minulta ei onnistu def main() sisältä kutsua def taistelusysteemi() funktiota. Eli mainissa on valikko josta valitaan numerolla joku toiminto ja if lauseiden avulla aukaista numeroa vastaava funktio. Esim kauppa. Ohjelmassa muuten ei ole kuin paljon listoja sekä, [code]if __name__ == '__main__':
main()
Koodia: [Valitse]
ihan lopussa jotta def main() saadaan kutsuttua. Taistelusysteemi funktioon tulisi laskuja yms tavaran hakua listoista sekä tulosten printtausta. Mistä apua? Muokkaanko toimintaa vai saako tuon kutsuttua jollain tavalla...[/code]
« Viimeksi muokattu: 13.04.10 - klo:21.38 kirjoittanut asuspoju »
http://www.youtube.com/user/LinuxEki
"Varkaat tulee ikkunoista"
http://tinyurl.com/ltspopin - Opinnäytetyöni LTSP-järjestelmästä

SuperOscar

  • Käyttäjä
  • Viestejä: 4060
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Python def funktion kutsuminen
« Vastaus #1 : 12.04.10 - klo:17.57 »
Siis hö? Jos määrität funktion näin:

Koodia: [Valitse]
def foo(parametrit):
...kutsut sitä näin:

Koodia: [Valitse]
foo(parametrit)
Ja kummassakin parametrit voivat puuttua. Eli eikö tässä tapauksessa riitä, että main-funktiossa kutsutaan funktiota:

Koodia: [Valitse]
taistelusysteemi()
(parametrit tuohon lisäten, jos tarpeen)?
pöytäkone 1, NUC: openSUSE Leap 15.6, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

asuspoju

  • Käyttäjä
  • Viestejä: 640
  • Linux_Eki useissa verkkopeleissä, palveluissa jne.
    • Profiili
    • Youtube kanavani.
Vs: Python def funktion kutsuminen
« Vastaus #2 : 12.04.10 - klo:18.10 »
Parametreistä en vielä tiedä mutta ei vain kutsu tuolla taistelusysteemi()
Funktiossa on yks print että näkee toimiiko. Tähän mennessä ei ole mitään tapahtunut :D
Mikä näiden parametrien tehtävänä on?
http://www.youtube.com/user/LinuxEki
"Varkaat tulee ikkunoista"
http://tinyurl.com/ltspopin - Opinnäytetyöni LTSP-järjestelmästä

asuspoju

  • Käyttäjä
  • Viestejä: 640
  • Linux_Eki useissa verkkopeleissä, palveluissa jne.
    • Profiili
    • Youtube kanavani.
Vs: Python def funktion kutsuminen
« Vastaus #3 : 12.04.10 - klo:18.22 »
Jaahas... raw_input ei jostain syystä toiminut kun numeroita laitetaan  :D
Vaihdoin input:iin ja toimii.
Edit: Usein foorumille kirjoittaminen ratkaisee asiat ;D
« Viimeksi muokattu: 12.04.10 - klo:18.28 kirjoittanut asuspoju »
http://www.youtube.com/user/LinuxEki
"Varkaat tulee ikkunoista"
http://tinyurl.com/ltspopin - Opinnäytetyöni LTSP-järjestelmästä

Pellervo Kässi

  • Käyttäjä
  • Viestejä: 191
    • Profiili
Vs: Python def funktion kutsuminen, lisäksi random ongelma
« Vastaus #4 : 13.04.10 - klo:19.39 »
Esitän kysymyksiä joita miettimällä varmaankin löydät vastauksen:

Poimit siis mlista - listasta alkion kohdasta, jonka arvot siinä yläpuolella ja tämä alkio (tallennetaan nimellä string) on muodoltaan lista?

Kuinka pitkä tuo string-lista on?

Onko tempdmg-muuttujaan tarkoitus arpoa nimenomaan tuon listan 2. ja 3. alkio (pythonissa listojen indeksointi alkaa 0:sta)?




asuspoju

  • Käyttäjä
  • Viestejä: 640
  • Linux_Eki useissa verkkopeleissä, palveluissa jne.
    • Profiili
    • Youtube kanavani.
Vs: Python def funktion kutsuminen, lisäksi random ongelma
« Vastaus #5 : 13.04.10 - klo:21.38 »
Huomasin että tuo string[1] tulostaa vastustajan toisen kirjaimen, eikä hae string muuttujan sisältöä vastaavasta listasta indexejä.
mlistan indexeissä on vain tekstiä.         idm = random.randrange(0,6)  string = mlista[idm] #heittää string muuttujaan mlistan indexiä vastaavan tekstin. Kaikille mlistassa oleville indexin arvoille löytyy täsmälle saman niminen lista, joiden indexeissä on vain numeroita.
« Viimeksi muokattu: 13.04.10 - klo:21.42 kirjoittanut asuspoju »
http://www.youtube.com/user/LinuxEki
"Varkaat tulee ikkunoista"
http://tinyurl.com/ltspopin - Opinnäytetyöni LTSP-järjestelmästä

SuperOscar

  • Käyttäjä
  • Viestejä: 4060
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Python def funktion kutsuminen, lisäksi random ongelma
« Vastaus #6 : 13.04.10 - klo:21.43 »
Huomasin että tuo string[1] tulostaa vastustajan toisen kirjaimen,

Totta kai. Mitä muuta odotit? Merkintä ”<1>” tarkoittaa ’sekvenssin toista alkiota’. Jos muuttuja ”string” (joka on muuten äärimmäisen huono nimi) sisältää merkkijonon, ”string<1>” palauttaa merkkijonon toisen kirjaimen alusta lukien.

(Oli korvattava hakasulkeet kulmasulkeilla, jottei foorumisofta seonnut viestiä näyttäessään.)
pöytäkone 1, NUC: openSUSE Leap 15.6, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

asuspoju

  • Käyttäjä
  • Viestejä: 640
  • Linux_Eki useissa verkkopeleissä, palveluissa jne.
    • Profiili
    • Youtube kanavani.
Vs: Python def funktion kutsuminen, lisäksi random ongelma
« Vastaus #7 : 13.04.10 - klo:22.29 »
Huomasin että tuo string[1] tulostaa vastustajan toisen kirjaimen,

Totta kai. Mitä muuta odotit? Merkintä ”<1>” tarkoittaa ’sekvenssin toista alkiota’. Jos muuttuja ”string” (joka on muuten äärimmäisen huono nimi) sisältää merkkijonon, ”string<1>” palauttaa merkkijonon toisen kirjaimen alusta lukien.

(Oli korvattava hakasulkeet kulmasulkeilla, jottei foorumisofta seonnut viestiä näyttäessään.)
Muutinpa sen tuloksetta.
Edit: Niin ja älkää olettako että tiedän paljoakaan ohjelmoinnista  ;). Mitä nyt vähäsen c# vuos sitten ja nyt pythonia ja pygamea.
« Viimeksi muokattu: 13.04.10 - klo:22.36 kirjoittanut asuspoju »
http://www.youtube.com/user/LinuxEki
"Varkaat tulee ikkunoista"
http://tinyurl.com/ltspopin - Opinnäytetyöni LTSP-järjestelmästä

SuperOscar

  • Käyttäjä
  • Viestejä: 4060
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Python def funktion kutsuminen, lisäksi random ongelma
« Vastaus #8 : 13.04.10 - klo:23.48 »
No jos katsotaan koodiasi:

Koodia: [Valitse]
idm = random.randrange(0,6)
idm on nyt satunnainen luku väliltä [0, 6[.

Koodia: [Valitse]
string = mlista[idm]
string valitsee yhden (satunnaisen) alkion mlistasta. Jos mlista on merkkijono, tuloksena on yhden merkin pituinen merkkijono. Jos mlista on lista tai sanasto, tuloksena on yksittäinen alkio, joka voi olla melkein mitä tyyppiä vain.

Koodia: [Valitse]
tempdmg = random.randint(string[1],string[2])
Tässä kuitenkin oletat, että string-muuttuja on sekvenssi, jossa on kaksi alkiota. Tätä Pellervo Kässi tuossa yllä yritti sanoa.

Aika paljon riippuu lopulta siitä, mitä mlista-muuttuja on syönyt.
pöytäkone 1, NUC: openSUSE Leap 15.6, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

asuspoju

  • Käyttäjä
  • Viestejä: 640
  • Linux_Eki useissa verkkopeleissä, palveluissa jne.
    • Profiili
    • Youtube kanavani.
Vs: Python def funktion kutsuminen, lisäksi random ongelma
« Vastaus #9 : 14.04.10 - klo:01.31 »
Tämäkin pulma ratkesi pitkän selvittelyn jälkeen. Tosin serkku sai selvitettyä.
mlista ihan normaali mutta tämä toinen lista josta koetin hakea arvoja täytyy tehdä eri tavalla. Esim:
mlista2 = { "Facebook":["Facebook", 1, 2, 3, 4, 5, 6, 7], "Emesene":["Emesene", 1, 2, 3, 4, 5, 6, 7]}

ja defissä randomi eri tavalla:
idm = random.randint(0,5)
m=mlista[idm]
stringm=mlista2[m]
tempdmg = random.randrange(int(float(stringm[1])), int(float(stringm[2])))
http://www.youtube.com/user/LinuxEki
"Varkaat tulee ikkunoista"
http://tinyurl.com/ltspopin - Opinnäytetyöni LTSP-järjestelmästä

SuperOscar

  • Käyttäjä
  • Viestejä: 4060
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Python def funktion kutsuminen, lisäksi random ongelma
« Vastaus #10 : 14.04.10 - klo:01.52 »
mlista ihan normaali mutta tämä toinen lista josta koetin hakea arvoja täytyy tehdä eri tavalla. Esim:
mlista2 = { "Facebook":["Facebook", 1, 2, 3, 4, 5, 6, 7], "Emesene":["Emesene", 1, 2, 3, 4, 5, 6, 7]}

ja defissä randomi eri tavalla:
idm = random.randint(0,5)
m=mlista[idm]
stringm=mlista2[m]
tempdmg = random.randrange(int(float(stringm[1])), int(float(stringm[2])))

Tämä vaikuttaa ihan hullulta... Ensinnäkin jos käytät aina vain toisen ja kolmannen arvon noista listoista, mihin muita tarvitaan? Toisekseen on turha toistaa sanaston avainta arvona olevassa listassa. Kolmannekseen on pelkästään ajan tuhlausta muuttaa kokonaisluku (esim. stringm[1]) ensin liukuluvuksi (float()), sitten takaisin kokonaisluvuksi (int()). Neljännekseen on turha ylipäänsä käyttää kokonaislukuja, koska random-moduuliin sisältyy myös funktio choice(), jolla voit suoraan valita mistä hyvänsä sekvenssistä satunnaisen alkion. Jne.

Tässä tapauksessa, jos oikein tarkoitusperiäsi luen, pääsisit helpommalla näin:

Koodia: [Valitse]
mlista = {'Facebook': [1, 2, 3, 4, 5, 6, 7],
          'Emesene': [1, 2, 3, 4, 5, 6, 7]}
stringm = mlista[random.choice(mlista.keys())]
tempdmg = random.randrange(stringm[0], stringm[1])

...vaikka arvoitukseksi edelleen jäisi, mihin tarvitaan listojen muita arvoja (3...7), jos niitä ei koskaan käytetä.
« Viimeksi muokattu: 14.04.10 - klo:01.55 kirjoittanut SuperOscar »
pöytäkone 1, NUC: openSUSE Leap 15.6, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

asuspoju

  • Käyttäjä
  • Viestejä: 640
  • Linux_Eki useissa verkkopeleissä, palveluissa jne.
    • Profiili
    • Youtube kanavani.
Vs: Python def funktion kutsuminen, lisäksi random ongelma
« Vastaus #11 : 14.04.10 - klo:17.05 »
Kyllä nuita muita tarvitsee myöhemmin. Kokeilenpa ehdotustasi.
http://www.youtube.com/user/LinuxEki
"Varkaat tulee ikkunoista"
http://tinyurl.com/ltspopin - Opinnäytetyöni LTSP-järjestelmästä