Pereiti prie turinio

Iškilo bėda su Python


Rekomenduojami pranešimai

Sveiki, kodėl bandau na pagal internetą daryti kažką mokintis ir suvedu štai tokį kodą

 

a=0
while a !=8:
a=int(raw_input('iveskite skaiciu: '))

 

ir kaip paspaudžiu du sykius Enter, kad programa baigtu daryti šį kodą štai ką išmeta

 

Traceback (most recent call last):
 File "<pyshell#9>", line 2, in <module>
   a=int(raw_input('iveskite skaiciu: '))
NameError: name 'raw_input' is not defined

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jo, taip ir dariau, pabandžiau nutrinti raw_ pabandęs ir suveikė :). Bet dabar noriu įsidiegti WEB modulius ant WIN, nes radau vieną tik ant Host serverio, gal kas turit pamoką kur ant WIN ir, kad būtų prie to pačio parsisisūti WEB modulius, nes sukūriau mini scriptuką noriu patestinti :)

Redagavo Andriuszz
Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 1 mėnesio...

Nebenorejau kurti naujos temos dėl to rašau čia. Gal galite padėti paaiškinti, nesuprantu kodo vienos dalies.

http://learnpythonthehardway.org/book/ex41.html

Visa programa man aiški iki čia

def runner(map, start):
   next = start

   while True:
       room = map[next]
       print "\n--------"
       next = room()

runner(ROOMS, 'central_corridor')

ta apatinė eilutė tai aiški, visos programos paleidimas. Central_corridor tampa start, next = start, irgi aišku, tada va nebesuprantu. room = map[next], tai kaip suprantu kambarys = centarl_corridor, o next=room() ka tai duoda?

Redagavo werlex
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nebenorejau kurti naujos temos dėl to rašau čia. Gal galite padėti paaiškinti, nesuprantu kodo vienos dalies.

http://learnpythonthehardway.org/book/ex41.html

Visa programa man aiški iki čia

def runner(map, start):
   next = start

   while True:
       room = map[next]
       print "\n--------"
       next = room()

runner(ROOMS, 'central_corridor')

ta apatinė eilutė tai aiški, visos programos paleidimas. Central_corridor tampa start, next = start, irgi aišku, tada va nebesuprantu. room = map[next], tai kaip suprantu kambarys = centarl_corridor, o next=room() ka tai duoda?

Jeigu atidžiai pasižiūrėtum, pastebėtum, kad room kintamasis nurodomas čia, o map[next] grąžina funkciją, kuri ir bus kitas kambarys:

room = map[next]

 

O čia, tas žemėlapis pradedamas vykdyti ir next kintamajam nurodomas tos funkcijos išvedimas:

next = room()

reiškiantis kitą kambarį (tiksliau jo raktą map dictionary'je), pavyzdžiui:

44. return 'death'

arba

53. return 'laser_weapon_armory'

 

 

Taigi išvedamas string.

 

Panagrinėkime kas būtų mirties atveju, kai dabar next = 'death'.

 

Taigi room kintamasis dabar yra lygus funkcijai(paimta iš dictionary 'map') death nurodytai pačioje žaidimo pradžioje.

room = map['death']

Čia ta funkcija įvykdoma. Jei kambarys neišjungtų programos su exit(1), žaidimas vyktų toliau.

next = room()

Redagavo nagisa
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jeigu atidžiai pasižiūrėtum, pastebėtum, kad room kintamasis nurodomas čia, o map[next] grąžina funkciją, kuri ir bus kitas kambarys:

room = map[next]

 

O čia, tas žemėlapis pradedamas vykdyti ir next kintamajam nurodomas tos funkcijos išvedimas:

next = room()

reiškiantis kitą kambarį (tiksliau jo raktą map dictionary'je), pavyzdžiui:

44. return 'death'

arba

53. return 'laser_weapon_armory'

 

 

Taigi išvedamas string.

 

Panagrinėkime kas būtų mirties atveju, kai dabar next = 'death'.

 

Taigi room kintamasis dabar yra lygus funkcijai(paimta iš dictionary 'map') death nurodytai pačioje žaidimo pradžioje.

room = map['death']

Čia ta funkcija įvykdoma. Jei kambarys neišjungtų programos su exit(1), žaidimas vyktų toliau.

next = room()

Labai dėkui, dabar aiškiau. Bandžiau žiūrėti 42 pamoką, bet ten su class einama ir truputi sunkiau gaudausi ten, tai dabar gal biški paaiškės. Jeigu kas dar kreipsiuos.

P.S. dar patikslinimui, tas map[next] galma sakyti nurodo kuris kitas def(funkcija ji vadinasi taip?) eis?

Redagavo werlex
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Labai dėkui, dabar aiškiau. Bandžiau žiūrėti 42 pamoką, bet ten su class einama ir truputi sunkiau gaudausi ten, tai dabar gal biški paaiškės. Jeigu kas dar kreipsiuos.

P.S. tas map[next] galma sakyti nurodo kuris kitas def(funkcija ji vadinasi taip?) eis jo?

Funkcija yra kaip kintamasis. Taigi tame maps dictionary padaroma dar viena nuoroda į tą funkciją. O paskui padaroma ir dar viena nuoroda su kintamuoju room. Taigi kviečiant tarkime

death()

map['death']()

room = map['death']
room()

bus atliekamas vienas ir tas pats veiksmas, nes tai yra viena ir ta pati funkcija.

 

Labai gerai tai galima pavaizduoti paprastesniu būdu:

>>> def funct():
...     return True
... 
>>> funct
<function funct at 0x7f53b5fb2578>
>>> funct()
True

>>> dic = {'a':funct} ##kitaip: dic['a'] = funct
>>> dic['a']
<function funct at 0x7f53b5fb2578>

>>> b = dic['a']
>>> b
<function funct at 0x7f53b5fb2578>
>>> b()
True

Redagavo nagisa
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Funkcija yra kaip kintamasis. Taigi tame maps dictionary padaroma dar viena nuoroda į tą funkciją. O paskui padaroma ir dar viena nuoroda su kintamuoju room. Taigi kviečiant tarkime

death()

map['death']()

room = map['death']
room()

bus atliekamas vienas ir tas pats veiksmas, nes tai yra viena ir ta pati funkcija.

 

Labai gerai tai galima pavaizduoti paprastesniu būdu:

>>> def funct():
...     return True
... 
>>> funct
<function funct at 0x7f53b5fb2578>
>>> funct()
True

>>> dic = {'a':funct} ##kitaip: dic['a'] = funct
>>> dic['a']
<function funct at 0x7f53b5fb2578>

>>> b = dic['a']
>>> b
<function funct at 0x7f53b5fb2578>
>>> b()
True

 

Laabai ačiū nagisa

 

def runner(map, start):
   next = start

   while True:
       room = map[next]
       print "\n--------"
       next = room()

runner(ROOMS, 'central_corridor')

 

Kodel yra naudojame while True? nes aš nepagaunu, kada patampa False ir užsibaigia skriptas. Ar jis neturi užsibaigti, nes mum padeda exit? Todėl visada veiks iki exit? Ar teisingai samprotauju?

 

P.S. Išmėginau žaidima nenaudojant next = start

def runner(map, start):
   while True:
       room = map[start]
       print "\n--------"
       start = room()

runner(ROOMS, 'central_corridor')

Ar tokį kodą galime naudoti? Lyg viskas veikia be jokių problemų.

Redagavo werlex
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kodel yra naudojame while True? nes aš nepagaunu, kada patampa False ir užsibaigia skriptas. Ar jis neturi užsibaigti, nes mum padeda exit? Todėl visada veiks iki exit? Ar teisingai samprotauju?

 

P.S. Išmėginau žaidima nenaudojant next = start

def runner(map, start):
   while True:
       room = map[start]
       print "\n--------"
       start = room()

runner(ROOMS, 'central_corridor')

Ar tokį kodą galime naudoti? Lyg viskas veikia be jokių problemų.

Kodėl gi ne :) Na, o „while True“ būtent tam, kad ciklas suktųsi amžinai (na, nebent bus išjungtas su exit() ar kuo nors panašiu).

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kodėl gi ne :) Na, o „while True“ būtent tam, kad ciklas suktųsi amžinai (na, nebent bus išjungtas su exit() ar kuo nors panašiu).

Nu aišku to ir norėjau, dabar didžiausia bėda su klasėmis :/

from sys import exit

from random import randint

class Game(object):

   def __init__(self, start):

       self.deaths = ["Mirei, gaila",

                   "Sekmes kita karta",

                   "ismok zaisti",

                   "ka padarysi"]

       self.start=start

   def pradzia(self):

       next = self.start

       while True:

           print "\n-----------------"

           kambarys = getattr(self, next)

           next = kambarys()

   def death(self):

       print self.deaths[randint(0, 3)]

       exit(1)

   def pagr_koridorius(self):

       print " Main roomas ,kuriame viska pamatysi pats"

       print " Pasirink ejima kairen desinen tiesiai? "

       veiksmas = raw_input('> ')

       if veiksmas == "kairen":

           print " uff nepasiseke, ten yra duobe"

           print " tu I ja ikritai"

           return 'death'

       elif veiksmas == "tiesiai":

           print "Tu kazkoks nelaimingas zmogelis"

           print "Tave pagavo rpie baro ir sumuse"

           return 'death'

       elif veiksmas == "desinen":

           print " Gerasa pasirinkimas"

           print "tik idomu kaip sekss toliau"

           return 'desinys'

       else:

           return 'pagr_koridorius'

   def desinys(self):

       print "pasiseke praeti toliau, uztat dabar nepasiseks"

       print " rinkis viena skaciu"

       skaic = "%d" % (randint(1, 9))

       bandym = raw_input(' skaicius => ')

       bandymai=1



       while bandym !=  skaic and bandymai < 3:

           print " nepavyko"

           bandymai +=1

           bandym = raw_input(' skaicius => ')

       if bandym == skaic:

           print "Laimes vakis, sekmes aukso kamabryje!"

           return 'auksas'

       else:

           print "die bitch"

           return 'death'

   def auksas(self):

       print "penkios aukso skrynios, kuria renkiesi?"

       skrynia = randint(1,5)

       spej = raw_input('skrynia # ')



       if int(spej) == skrynia:

            print "Svekinu Laimejai!"

            exit(0)

       else:

           return 'death'

zaid = Game('pagr_koridorius')

zaid.pradzia()

 

Gal galite užvesti ant kelio, sako padaryti žaidima per atskiras klases, ta prasme, kad Enegine viena class ir kitka kita class, kaip padaryti tą perėjimą nuo vienos klasės prie kitos?

Redagavo werlex
Nuoroda į pranešimą
Dalintis kituose puslapiuose

mat aš tolaiu 42 pamokos nebežiūrėjau. Kas kaip veikia suprantu. Tik gal vienintelė vieta

def __init__(self, start):

neduoda ramybės kam ta __init__ visur naudoja(skaičiau, kad initialize, bet taip giliau ir nepagavau). O su tom klasėmis kaip kiekvieną kambarį padaryti, gal tolesnėse pamokose yra?

P.S. http://learnpythonthehardway.org/book/ex45.html čia matau yra su klasėmis, gal pabandyti šitą metodą? paimti objektą, o poto daleiskim kambarius sudėti?

Redagavo werlex
Nuoroda į pranešimą
Dalintis kituose puslapiuose

mat aš tolaiu 42 pamokos nebežiūrėjau. Kas kaip veikia suprantu. Tik gal vienintelė vieta

def __init__(self, start):

neduoda ramybės kam ta __init__ visur naudoja(skaičiau, kad initialize, bet taip giliau ir nepagavau). O su tom klasėmis kaip kiekvieną kambarį padaryti, gal tolesnėse pamokose yra?

P.S. http://learnpythonthehardway.org/book/ex45.html čia matau yra su klasėmis, gal pabandyti šitą metodą? paimti objektą, o poto daleiskim kambarius sudėti?

Na, __init__ yra speciali funkcija (angliškai „magic method“ vadinasi, jei taip tik galima __init__ vadinti), kuri paleidžiama automatiškai kiekvienąkart sukurūs naują klasės instanciją :)

 

Galėtum ir kaip čia, su paveldimumu - sukuri vieną Room klasę, o po to kuri praplėsdamas jį kambarius :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Siūlau apsilankyti http://3dev.lt puslapyje, yra ~40 Python pamokų, žinoma lietuviškos. Galbūt lengviau suprasi viską :)

Jų autorius ne tik nelabai ką išmano apie banaliausias saugumo skyles, nemoka priimti kritikos, bet dar yra ir scameris :) Kalbėjom apie tai jau čia. Eilinis super hackeris, pats nieko dorai neišmokęs, puolantis mokyti kitus. Jei taip būtų realybėje, mokykloje turėtume mokytojus, kurie nemokėtų 2 pakelti kvadratu.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Siūlau apsilankyti http://3dev.lt puslapyje, yra ~40 Python pamokų, žinoma lietuviškos. Galbūt lengviau suprasi viską :)

 

Dėkui, padėjo suvokti kaikuriuos dalykus, kurių iki galo buvau nepagavęs.

 

Jų autorius ne tik nelabai ką išmano apie banaliausias saugumo skyles, nemoka priimti kritikos, bet dar yra ir scameris :) Kalbėjom apie tai jau čia. Eilinis super hackeris, pats nieko dorai neišmokęs, puolantis mokyti kitus. Jei taip būtų realybėje, mokykloje turėtume mokytojus, kurie nemokėtų 2 pakelti kvadratu.

 

Dėl viso to nežinau, bet mokytis iš python the hard way ir pažiūrint ko nesupranti iš 3Dev, gal spragų neprisidarysiu :)

Redagavo werlex
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pats buvau pradėjęs mokytis iš 3Dev, na, bet jeigu sakot, kad nėra nieko gero ten, tikriausiai darysiu kaip ir werlex - mokysiuis iš Learn Python The Hard Way, o jeigu ko nesuprasiu - pasižiūrėsiu į 3Dev, tiesiog, kad suprasti kaip kas.

Pasikartosiu turbūt, bet Hard Way dažnai ir būna per hard, tiesiog numeta kodo gabalą ir liepia pačiam išsiaiškinti, kaip veikia. Verta pasižiūrėt ir į mano minėta Dive into Python. O ko nesupranti geriausia žiūrėti ne 3Dev, o docs.python.org.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pasikartosiu turbūt, bet Hard Way dažnai ir būna per hard, tiesiog numeta kodo gabalą ir liepia pačiam išsiaiškinti, kaip veikia. Verta pasižiūrėt ir į mano minėta Dive into Python. O ko nesupranti geriausia žiūrėti ne 3Dev, o docs.python.org.

 

O kaip tada Head First Python? Esi bandęs gal?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O kaip tada Head First Python? Esi bandęs gal?

Nepamenu, kažkada gal ir žiūrėjau. Giria daug kas Head First seriją. Tik žiūrėk, kad nebūtų Python 3 skirta :-)

Šiaip svarbiausia pagaut pačius principus kalbos. Iš PHP atėjusiems pvz. sunku būna dėl to, kad Python pilnai objektinė kalba ir pan. :-)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nepamenu, kažkada gal ir žiūrėjau. Giria daug kas Head First seriją. Tik žiūrėk, kad nebūtų Python 3 skirta :-)

Šiaip svarbiausia pagaut pačius principus kalbos. Iš PHP atėjusiems pvz. sunku būna dėl to, kad Python pilnai objektinė kalba ir pan. :-)

 

 

O php objektų tipo nenaudoja, nesamonė... Iš PHP atėjusėms yra taip pat sunku kaip ir iš kokios JAVA, pyhton turi savitą sintaksę, kuri is esmės skiriasi nuo daugelio populiariausių programvimo kalbų. Taigi jeigu nesupranti OOP tai kalbą pakeitęs ne ką daugiau ir temokėsi.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...