Pereiti prie turinio

PYTHON naujoko klausimas


Rekomenduojami pranešimai

Dėkui už atsakymą. Taip dabar ir pats pastebėjau, kad neteisinga. O kaip kitaip man gauti paskutinius 10 skaičių?

Pirmiausiai, tai skirtukas slice argumentų yra : o ne ,. O paskutiniai skaičiau būtų

a[-10:] # pradedam nuo dešimto nuo galo, jį įskaitant, ir tęsiam iki pat galo, todėl antro argumento tiesiog nerašom

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pirmiausiai, tai skirtukas slice argumentų yra : o ne ,. O paskutiniai skaičiau būtų

a[-10:] # pradedam nuo dešimto nuo galo, jį įskaitant, ir tęsiam iki pat galo, todėl antro argumento tiesiog nerašom

TypeError: 'long' object is not subscriptable

 

 

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Panašu, kad taip... Kurias užduotis ProjectEulerio esi išsprendęs jau?

Kolkas nedaug: 1,6,13,48...

 

 

Dabar skaitau Dive Into Python, tai ką perskaitau tą ir bandau panaudoti spręsdamas. Be to žiūrių google python class, ten informaciją gautą knygoje užtvirtinu dar kartą ją išgirsdamas. O dėl projecteuler tai gaila, nes nelabai randu lygiaverčių tinklpių jam.

 

 

 

 

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 2 mėnesių...

Gal galite pasiūliti, kaip suinstaliuoti pygame ant windows 7 64bit. Nes dabar gaunu tokią klaidą:

 


Traceback (most recent call last):
 File "<pyshell#0>", line 1, in <module>
   import pygame
 File "C:\Python27\lib\site-packages\pygame\__init__.py", line 95, in <module>
   from pygame.base import *
ImportError: DLL load failed: %1 nėra leistina Win32 taikomoji programa.

 

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Gal galite pasiūliti, kaip suinstaliuoti pygame ant windows 7 64bit. Nes dabar gaunu tokią klaidą:

 


Traceback (most recent call last):
 File "<pyshell#0>", line 1, in <module>
   import pygame
 File "C:\Python27\lib\site-packages\pygame\__init__.py", line 95, in <module>
   from pygame.base import *
ImportError: DLL load failed: %1 nėra leistina Win32 taikomoji programa.

 

 

windows 64bit users note: use the 32bit python with this 32bit pygame.

Ar paklausei šio patarimo? Kadangi x64 installerių pygame berods neleidžia. Nebent teks susikompiliuoti pačiam.

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 2 savaičių...

Sveiki, na ką gi, pirmas klausimas su pygame:

 

Galvoje gimė idėja sukurti žaidimuką. Taigi sugalvojau sukurti žaidimą, kuriame reikės su musekliu pritrėkšti tarakoną. Štai, ką man pavyko nuveikti per savaitę( video skirtas kitam forumui):

 

 

http://www.youtube.com/watch?v=W3DD3PoThjg&feature=player_embedded

 

 

Kaip matote ir museklis ir tarakonas valdosi išoriškai, o aš noriu, kad bent pradžioj tarakonas bėgtų ratu.

 

Taip, padarau, kad tarakonas bėgtų į dešinę:

 


screen.blit(tarakonas, (a,b))
   a+=0.15
   b=150

 

 

O kai bandau , kad nubėgęs iki tam tikro taško jis pradėtų kilti aukštyn man neišeina:

 


screen.blit(tarakonas, (a,b))
   a+=0.15
   b=150
   if a==300:
       a=300
       b+=0.15 

 

Prašau jūsų pagalbos ištaisant šį kodo gabaliuką arba pateikiant kitokį tarakono bėgimo ratu būdą. Dėkui

 

 

 

 

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose


background="bg.jpg"
museklis="museklis.png"
tarakonas="tarakonas.jpeg"


import pygame,sys
from pygame.locals import *
pygame.init()

screen=pygame.display.set_mode((600,300),0,32)

background=pygame.image.load(background).convert()
museklis=pygame.image.load(museklis).convert_alpha()
tarakonas=pygame.image.load(tarakonas).convert()

a,b=0,0



while True:
   for event in pygame.event.get():
       if event.type == QUIT:
           pygame.quit()
           sys.exit()     
   screen.blit(background, (0,0))
   screen.blit(tarakonas, (a,b))
   a+=0.15
   b=150
   if a==300:
       a=300
       b+=0.15



   x,y = pygame.mouse.get_pos()
   x -= museklis.get_width()/1.5
   y -= museklis.get_height()/4

   screen.blit(museklis,(x,y))

   pygame.display.update()


 

 

Redagavo Dekis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pakliuvai pas floating-point comparison. Trupmeniniai skaičiai nėra visiškai tikslūs, ir po kažkiek veiksmų gali gautis ne lygiai 300, ko tau reikia, o pvz. koks nors 300.000001 ir jau a == 300 būna False.

Keičiam

if a==300:

į

if int(a) == 300:

 

Vieno pikselio tikslumą pametam, bet bent jau gausim True kada nors... :)

 

Bet toliau dar viena problem - ciklas vis tiek bet kokiu atveju sukasi kiekvieną kartą, todėl kas gaunasi kai ta sąlyga būna true įsivykdo ir prieš tai einanti dalis, kurioje atstatai b į 150. Tik tada jau pridedinėji prie jo 0.15. Per kitą ciklo iteraciją vėl kartoji atstatymą į b=150 ir todėl tarakonas niekur nepajuda...

 

Žodžiu, darom viską taip:

 

   if int(a)!=300:
       a+=0.15
       b=150
   else:
       print a
       a=300
       b+=0.15

 

Visas ciklas tada atrodo taip:

while True:
   for event in pygame.event.get():
       if event.type == QUIT:
           pygame.quit()
           sys.exit()
   screen.blit(tarakonas, (a,b))
   if int(a)!=300:
       a+=0.15
       b=150
   else:
       print a
       a=300
       b-=0.15 # aukstyn kylama, kai koordinates mazeja, ne dideja.

   x,y = pygame.mouse.get_pos()
   x -= museklis.get_width()/1.5
   y -= museklis.get_height()/4

   screen.blit(museklis,(x,y))

   pygame.display.update()

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pakliuvai pas floating-point comparison. Trupmeniniai skaičiai nėra visiškai tikslūs, ir po kažkiek veiksmų gali gautis ne lygiai 300, ko tau reikia, o pvz. koks nors 300.000001 ir jau a == 300 būna False.

Keičiam

if a==300:

į

if int(a) == 300:

 

Vieno pikselio tikslumą pametam, bet bent jau gausim True kada nors... :)

 

Bet toliau dar viena problem - ciklas vis tiek bet kokiu atveju sukasi kiekvieną kartą, todėl kas gaunasi kai ta sąlyga būna true įsivykdo ir prieš tai einanti dalis, kurioje atstatai b į 150. Tik tada jau pridedinėji prie jo 0.15. Per kitą ciklo iteraciją vėl kartoji atstatymą į b=150 ir todėl tarakonas niekur nepajuda...

 

Žodžiu, darom viską taip:

 

   if int(a)!=300:
       a+=0.15
       b=150
   else:
       print a
       a=300
       b+=0.15

 

Visas ciklas tada atrodo taip:

while True:
   for event in pygame.event.get():
       if event.type == QUIT:
           pygame.quit()
           sys.exit()
   screen.blit(tarakonas, (a,b))
   if int(a)!=300:
       a+=0.15
       b=150
   else:
       print a
       a=300
       b-=0.15 # aukstyn kylama, kai koordinates mazeja, ne dideja.

   x,y = pygame.mouse.get_pos()
   x -= museklis.get_width()/1.5
   y -= museklis.get_height()/4

   screen.blit(museklis,(x,y))

   pygame.display.update()

 

Žiauriai dėkui :) Tikriausiai vienintelis python specas uždarbis.lt :)

 

 

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 4 savaičių...

Dabar bandau "pritrėkšti" tarakoną. Štai taip:

 

elif event.type == pygame.MOUSEBUTTONDOWN:
           x_pos, y_pos = pygame.mouse.get_pos()
           if x_pos in range(a-30, a+30) and y_pos in range(b - 30, b + 30):
               print "yes"

 

Bet kaip visada gaunu įvairius error'us. Į

print "yes"

nekreipkite dėmesio. Jis tik pabandymui. Jeigu pavyks tada įdėsiu animaciją. Šiaip įdomu kas dabar negerai ir kaip kitaip jūs siūlote padaryti, kad paspaudus pele ant objekto jis pranyktų?

 

 

 

 

 

 

 

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Išsinagrinėjau error'us ir pasidariau pats:

 

elif event.type == pygame.MOUSEBUTTONDOWN:
           x_pos, y_pos = pygame.mouse.get_pos()
           xpradzia=int(a-60)
           xpabaiga=int(a+60)
           ypradzia=int(b-60)
           ypabaiga=int(b+60)
           if x_pos in range(xpradzia,xpabaiga) and y_pos in range(ypradzia,ypabaiga):
               pozicijos=circle(-100,-100,step=0)

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 3 mėnesių...

Noriu suprogramuoti valiutų keitiklį.

 

Pasirašiau tokį algoritmą:

 


LATAS={"LV":1, "LT":4.94,"EU":1.43, "USD":1.91, "GBP":1.18}
LITAS={"LV":0.2, "LT":1,"EU":0.29, "USD":0.39, "GBP":0.24}
DOLERIS={"LV":0.52, "LT":2.59,"EU":0.75, "USD":1, "GBP":0.62}
EURAS={"LV":0.7, "LT":3.45,"EU":1., "USD":1.33, "GBP":0.83}
SVARAS={"LV":0.85, "LT":4.18,"EU":1.21, "USD":1.62, "GBP":1}

class keitiklis():
   pinigai=0
   kursas=0
   def keitimas(self):
       suma=objektas.pinigai*objektas.kursas
       print suma

objektas=kursai()

def programa():
   objektas.pinigai=int(raw_input("Pinigų suma:"))
   pasirinkimas1=raw_input("Konvertuosite iš (USD, EU, LT, LV, GBP):")
   pasirinkimas2=raw_input("Konvertuosite į (USD, EU, LT, LV, GBP):")
   if pasirinkimas1=="USD":
       objektas.kursas=DOLERIS["%s" %pasirinkimas2]
       objektas.keitimas()
   elif pasirinkimas1=="EU":
       objektas.kursas=EURAS["%s" %pasirinkimas2]
       objektas.keitimas()
   elif pasirinkimas1=="LV":
       objektas.kursas=LATAS["%s" %pasirinkimas2]
       objektas.keitimas()
   elif pasirinkimas1=="LTU":
       objektas.kursas=LITAS["%s" %pasirinkimas2]
       objektas.keitimas()
   elif pasirinkimas1=="GBP":
       objektas.kursas=SVARAS["%s" %pasirinkimas2]
       objektas.keitimas()


programa()


 

Šiandien pasirašiau tokią GUI:

 


# Uzkraunam bibliotekas
import wx
from wx.lib.intctrl import IntCtrl
#Pagrindine klase
class app(wx.Frame):
#Funkcija, jeigu mygtukas paspaustas
  def OnButton(self,event):
     print "AAA"      
#Pagrindine funkcija      
  def __init__(self):
     #Langas
       wx.Frame.__init__(self,parent=None,id=-1, name="Valiutų Keitiklis", size=(400,300))
       panel=wx.Panel(self)
     #Mygtukas
       mygtukas=wx.Button(panel,label="Skaičiuoti", pos=(160,125), size=(75,30))
       self.Bind(wx.EVT_BUTTON, self.OnButton, mygtukas)
       #Tekstas
       str1= "Iš"
       str2= "Pinigų Suma"
       str3= "Į"
       tekstas1=wx.StaticText(panel, -1, str1, (65, 10))
       tekstas2=wx.StaticText(panel, -1, str2, (145, 10))
       tekstas3=wx.StaticText(panel, -1, str3, (300, 10))
       font = wx.Font(12, wx.BOLD, wx.NORMAL, wx.NORMAL)
       tekstas1.SetFont(font)
       tekstas2.SetFont(font)
       tekstas3.SetFont(font)
       #Teksto laukai
       teksto_laukas=IntCtrl(panel, -1, pos=(160,66), size=(75,22))
       teksto_laukas2=wx.TextCtrl(panel, -1, pos=(160,180), size=(75,22), style=wx.TE_READONLY)
       # Pasirinkimo lenteles
       sarasas=["LT","LV","EU","USD", "GBP"]
       pirmas_box=wx.ListBox(panel,-1, (40,40), (80,60), sarasas, wx.LB_SINGLE)
       pirmas_box.SetSelection(0)
       antras_box=wx.ListBox(panel,-1, (265,40), (80,60), sarasas, wx.LB_SINGLE)
       antras_box.SetSelection(0)                                                               		
#Vykdimas      
if __name__ == '__main__':
  programa= wx.PySimpleApp()
  objektas=app()
  objektas.Show()
  programa.MainLoop()



 

Man reikia, kad paspaudus mygtuką, gautų reikšmę iš teksto_laukas. Gal galite nurodyti būda tam atlikti?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Keiti:

teksto_laukas=IntCtrl(panel, -1, pos=(160,66), size=(75,22))

 

Į:

self.teksto_laukas=IntCtrl(panel, -1, pos=(160,66), size=(75,22))

 

Tada kuri naują metodą (ankstesnį ištrini):

 

def OnButton(self, event):
teksto_laukas_value = self.teksto_laukas.GetValue()

 

Turėtų veikti, tik matau yra IntCtrl, tai nežinau ar turi tokį metodą kaip GetValue(), TextCtrl tikrai turi.

 

Edit: Turi :D

Redagavo FaitasS
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Keiti:

teksto_laukas=IntCtrl(panel, -1, pos=(160,66), size=(75,22))

 

Į:

self.teksto_laukas=IntCtrl(panel, -1, pos=(160,66), size=(75,22))

 

Tada kuri naują metodą (ankstesnį ištrini):

 

def OnButton(self, event):
teksto_laukas_value = self.teksto_laukas.GetValue()

 

Turėtų veikti, tik matau yra IntCtrl, tai nežinau ar turi tokį metodą kaip GetValue(), TextCtrl tikrai turi.

 

Edit: Turi :D

Dėkui :) Kodėl mano galva dažniausiai ieško tokių sudėtingų sprendimų, kai viską galima padaryti taip paprastai..

 

 

 

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ą...