Új hozzászólás Aktív témák
-
cousin333
addikt
Teljesen igaz, amit írsz, a Python 2-ben a range egy komplett listát hoz létre és azon iterál végig. Ugyanakkor - bár nem szoktam kihangsúlyozni, de - Python 3 párti vagyok (és minden kezdőnek ezt javasolnám), tehát nekem az az alapértelmezett, hacsak nem írom ki, hogy Python 2. Márpedig a Python3 egyik előnye, hogy elhagyták az i-s és x-es hülyeségeket, és az alap kulcsszó már magát az iterátort jelenti. Tehát van a zip a régi izip, és a range a régi xrange helyett. Tisztább, szárazabb, biztonságosabb érzés.

>>> for i in range(5):
... print(i)
...
0
1
2
3
4
>>> for i in xrange(5):
... print(i)
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'xrange' is not definedui: Ha valaki a régi megoldásra vágyik, mert sok a RAM-ja, természetesen az is elérhető:
list(range(10))
-
gt7100
tag
válasz
cousin333
#595
üzenetére
Itt ugyan nincs jelentősége, de általában (hacsak nem változott valami a python3-ban) célszerű range helyett xrange-t használni.
Hogy miért, arra talán a legjobb demo egyx=range (《elérhető memória mérete bájtokban/4》)
parancsot kipróbálni, majd ugyanezt xrange felhasználásával.
-
cousin333
addikt
válasz
EQMontoya
#594
üzenetére
Először is, nincs benne ékezet, és ők is magyart használtak a pszeudokódban. Másrészt ez egy magyar fórumon adott segítség, az ilyesmi legyen a vizsgázó baja

Azért kíváncsi vagyok, mit szólnának ehhez, elvégre angolul van
:def isnumber(input_string):
ans = True;
for i in range(len(input_string)):
if ((input_string[i] < '0') or (input_string[i] > '9')):
ans = False;
return ans; -
cousin333
addikt
Igen, ezek is teljesen jó megoldások és átlagosan még gyorsabbak is. De akár bevethetjük a Python egyik fura szintaktikai megoldását, amivel nagyjából a második algoritmusodat kapjuk vissza:
def szam_e(szo):
for betu in szo:
if betu < '0' or betu > '9':
break
else:
return True
return FalseMég jó, hogy a Pythonnál az egyszerűségre törekedtek, és minden problémára lehetőleg csak egy (praktikus) megoldás létezik.

-
Szenty
tag
válasz
cousin333
#587
üzenetére
Esetleg úgy lehet picit optimalizálni, hogy a ciklusból kilépsz az első nem-szám karakternél:
def szam_e(szo):
valasz = True
for betu in szo:
if betu < '0' or betu > '9':
valasz = False
break
return valaszIlletve clean code-os körökben az is elfogadott, hogy a ciklusból adjuk vissza az eredményt (így a valasz változót ki is emeltem):
def szam_e(szo):
for betu in szo:
if betu < '0' or betu > '9':
return False
return True -
cousin333
addikt
Az én is olvastam, hogy érettségi feladat. A pszeudokód fogalma is rendben van, csak fura volt a szintaktikája.
Nyilván hűen követni kell a leírást, de azt kérdezte, hogy én hogyan írnám meg

Ha ezt így érettségin elém adnák, valószínűleg a 2. megoldásomat adnám be. Vagy te máshogy írtad volna? -
Karma
félisten
válasz
cousin333
#587
üzenetére
Mondta: érettségi feladat.
Ez a leíró nyelv egyébként a nyolcvanas években elég népszerű volt.Az "Informatikai alapismeretek" érettségi vizsgán pedig mindig van egy olyan feladat, melyben egy ilyen pszeudokódot kell "lefordítani" a diák által választott nyelvre. Hogy ennek mennyi értelme van, az vitatható, de nem az a feladat, hogy fejtsd vissza és írd meg helyesen/gyorsabban az algoritmust, hanem tükörfordítást várnak.
-
cousin333
addikt
válasz
XP NINJA
#586
üzenetére
Ez meg milyen leíró nyelv?

Azt kérdezted, én hogyan írnám meg. A válasz: sehogy, mert minek újra feltalálni a kereket, amikor van erre jó kis gyári függvény. Pl:
>>> szo1 = "Valami szöveg 123"
>>> szo1.isdigit()
False
>>> szo2 = "536 25"
>>> szo2.isdigit()
False
>>> szo3 = "53625"
>>> szo3.isdigit()
TrueHa viszont hűek akarunk lenni a példához - a Python nyelv elvárásain belül - akkor ezt írnám:
def szam_e(szo):
valasz = True
for betu in szo:
if betu < '0' or betu > '9':
valasz = False
return valaszA for ciklust mondjuk így is írhatnád:
for betu in szo:
if not '0' < betu < '9':
valasz = FalseVagy esetleg így:
import string
for betu in szo:
if betu not in string.digits:
valasz = FalseUpdate! Egy kis adalék: a saját megoldások futtatási ideje sorrendben 1,41, 1,61 és 1,55 us (mikroszekundum), ellenben a gyári függvénnyel 53,9 ns (nanoszekundum). Utóbbi tehát úgy 26-szor gyorsabb...

-
XP NINJA
őstag
Hali!
Érettségi feladatok között sosem találkoztam még függvénykészitéssel, és eddig el is voltam nélküle. De most kaptam egy ilyen feladatot:
Függvény szame(szo:karaktersorozat): logikai
valasz:=igaz
Ciklus i:=1-től hossz(szo)-ig
ha szo[i]<'0' vagy szo[i]>'9' akkor valasz:=hamis
Ciklus vége
szame:=valasz
Függvény végeTi hogy irnátok meg?

-
EQMontoya
veterán
-
Karma
félisten
válasz
MasterMark
#582
üzenetére
Az előző kódom pontosan azt csinálta, amit mondtál: az üres sorok előtti blokkot az egyikbe, az utánikat másikba tette be. Nem mondtad, hogy nem a fogad fáj

Mondjuk ez se agysebészet. A ciklus, ami végigmegy a fájlon nem változik, csak a belső feltétel. A re modullal meg lehet mintaillesztést végezni.
import re
list1 = []
list2 = []
pattern = re.compile("\d+")
with open("test.txt") as f:
for line in f:
stripped = line.strip()
if stripped:
if pattern.match(stripped):
list1.append(stripped)
else:
list2.append(stripped)Egyébként nem tudom, melyik része nem világos. Célszerű pontosabban kérdezni. Ha esetleg a strip() a problémás, azt azért használtam, mert a sorokat úgy kapja meg a for ciklus törzse, hogy a sor végén egy újsor karakter ott marad. A sor eleji és végi whitespace lenyírásával biztos, hogy a hasznos szövegre futnak a feltételek.
-
MasterMark
titán
Köszi. Működik, bár nem teljesen értem.

Viszont mégsem jó valamiért.
Valaki esetleg nem tudja, hogy hogy lehetne szétválasztani reguláris kifejezéssel? Vagyis a számmal kezdődőt rakja az egyikbe, betűvel kezdődőt a másikba, üres sorokat pedig kihagyni. Bár az adódna a másik kettőből azt hiszem.
De ezt sem tudom, hogy lehetne megoldani pythonban...
-
Karma
félisten
válasz
MasterMark
#580
üzenetére
Előirányzom, hogy nem vagyok nagy pythonos (a prog topik miatt vagyok itt), de pusztán stack overflow-val a következő kódot ütöttem össze pár perc alatt:
list1 = []
list2 = []
emptyLineFound = False
with open('test.txt') as f:
for line in f:
stripped = line.strip()
if stripped:
if emptyLineFound:
list2.append(stripped)
else:
list1.append(stripped)
else:
emptyLineFound = TrueA meglepetés számomra az volt benne, hogy for ciklussal végig lehet menni a fájl sorain, illetve egy üres string falsynak számít. A többi adja magát, ahogy korábban is beszéltük.
-
Karma
félisten
válasz
MasterMark
#578
üzenetére
Hol akadtál el?
Azért ez elég egyszerű beolvasás, amit meg lehet csinálni állapotgéppel vagy akár egymás után írt három ciklussal is (sor olvasás, amíg nem üres a beolvasott sor -> tömb 1; sor olvasás, amíg üres; sor olvasás, amíg nem üres -> tömb 2).
-
MasterMark
titán
Üdv
Szöveges fájlban így vannak adatok:
1...
2...
3...
4...
X..
Y...
Z...A közepén bármennyi üres sor lehet.
Hogy tudnám ezeket szétszedni két tömbre?
-
cousin333
addikt
válasz
XP NINJA
#576
üzenetére
Szintén kerekíteni kell, de azt csak tizedesjegyekre lehet. A megoldás szerintem, ha ideiglenesen megduplázod a számot, tízesekre kerekítesz, majd kettővel osztasz (jobbra shifttel, mert a sima osztásnak nem biztos, hogy egész szám az eredménye). Példa:
In [9]: def kerekit(x):
...: return round(2*x, -1) >> 1
...:
In [10]: for i in range(20):
....: print('{}: {}'.format(i, kerekit(i)))
....:
0: 0
1: 0
2: 0
3: 5
4: 5
5: 5
6: 5
7: 5
8: 10
9: 10
10: 10
11: 10
12: 10
13: 15
14: 15
15: 15
16: 15
17: 15
18: 20
19: 20Jónak tűnik...

-
XP NINJA
őstag
válasz
csaszizoltan
#574
üzenetére
Köszönöm, ezt olvastam, de a lambda miatt meg se próbáltam. De ajánlásodra megcsináltam és működik is.

Más: a kerekités függvényeket használtam már, de olyat még nem csináltam, hogy tizedes nélkülit kerekitsek megadott értékekre. Ez lenne a feladat: A jegy árának meghatározásakor az értéket öttel osztható számra kell kerekítenie. (1, 2, 6 és 7 esetén lefelé, 3, 4, 8 és 9 esetén pedig felfelé kell kerekítenie.) replace nem működik, mert integerről van szó.

-
EQMontoya
veterán
válasz
csaszizoltan
#574
üzenetére
Annyi megkötéssel, hogy ez nem in-place rendez, hanem le fogja másolni az eredeti listát, és kapsz egy másikat, ami rendezett. Pár ezer elemre nem para.
-
csaszizoltan
csendes tag
válasz
XP NINJA
#573
üzenetére
Szia!
https://wiki.python.org/moin/HowTo/Sorting
Speciel a Key Functions fejezet alatt:console
>>> student_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10),
]
>>> sorted(student_tuples, key=lambda student: student[2]) # kor szertint rendezve
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> sorted(student_tuples, key=lambda student: student[1]) # nagybetű szerint rendezve # and by me
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(student_tuples, key=lambda student: student[0]) # név szerint rendezve # and by me
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]csak a tuples-ek helyett Nálad kis listák vannak, azon belül egy elemre hivatkozás ugyanúgy történik.
Az itt felhasznált lambda függvény különösebb értése illetve magyarázata nélkül javaslom.
-
XP NINJA
őstag
Sziasztok!
Van egy több ezer listából álló listám, melyeknek 5 tagjuk van. Van benne string is és integer is. Melyik a legegyszerűbb módja annak, hogy sorba rendezzem őket mindig a lista 3. eleme szerint? (Tehát a sok lista egyben maradna, csak a nagy listán belül rendeződnének.) Válaszokat előre is köszönöm!

-
cousin333
addikt
válasz
DrojDtroll
#571
üzenetére
Pont ma néztem meg, hogy milyen lehetőségek vannak (bár elsősorban a kódfuttatás érdekelt). De kb. ennyi.

-
DrojDtroll
veterán
Próbált már valaki közülünk androidra fejleszteni pythonban?
-
#82595328
törölt tag
válasz
csaszizoltan
#569
üzenetére
Köszönöm a segítséget! Ez nem oldotta meg.
Helyette a codecs modul lett a megoldás.
A kód így néz ki:
import codecs
with codecs.open ('Lista.csv','rU',encoding='utf-8')as f:
f.readline()
for sor in f:Így már működik Windows és Linux alól is.
-
csaszizoltan
csendes tag
válasz
#82595328
#568
üzenetére
decode() vagy encode(), nem szeretem az empírikus programozást, de nekem ez már olyan rafinált probléma, amit nem szívesen értek meg, ha mégis, akkor a Windows console ablak nem UTF-8-ban jelenít meg és ezért azt a decode-dal UTF-8-ból "vissza" kell konvertálni, kódolni. Ha tudod mi a base64-es kódolás, akkor
itt egy jó példa:szóval ez talán jó lesz
:sor=sor.decode('UTF-8').strip().split(',')
-
#82595328
törölt tag
válasz
cousin333
#567
üzenetére
Kicsi szűkítem a problémát:
A hiba Windows 10-en futtatott Libreoffice 5.1.1.3-ból UTF-8 kódolással exportált .csv fájl esetén jelentkezik, ha Windows 10-en Python 3.5 IDLE-vel próbálom futtatni a scriptet. Ami vicces, hogy a scripet linux alatt jól jelenik meg az ékezetes karakter.
A kód kb. ennyi. Legalábbis a lényegi része.with open ('Lista.csv') as f:
f.readline()
for sor in f:
sor=sor.strip().split(',')Windows alatt ezt kapom:
[['NĂ©vĂ\xad', '1'], ['NĂ©vű', '10'], ['NĂ©vö', '100']]Ez pedig a lista:
Néví,1
Névű,10
Névö,100 -
cousin333
addikt
válasz
#82595328
#563
üzenetére
Egyáltalán mivel olvasod be? Kézzel, soronként? A csv modullal vagy valami mással? (melyik Python?)
Én a csv fájlokhoz (is) a pandas nevű modult használom. Jelen esetben talán kicsit túlzás, de amúgy sokrétűen használható. Van neki egy read_csv() metódusa, amiben sok egyéb mellett a kódolást is meg lehet adni.
A jelek szerint a LibreOffice mégiscsak kelet-európai kódolással ment (ahogy tipikusan az Excel is).
-
DrojDtroll
veterán
Szeretnék egy chat program szerű kinézetett a programomnak. Mivel lehetne megoldani legkönnyebben a buborékos kinézetett?

Valami ilyesmire gondoltam.
-
DrojDtroll
veterán
válasz
DrojDtroll
#564
üzenetére
.split() maradt ki a fájl beolvasása után

-
DrojDtroll
veterán
Valaki találkozott már olyannal hogy a .index() rossz eredmény ad?
-
#82595328
törölt tag
Karakterkódolási problémám van.
Csináltam egy .csv fájlt Libreoffice Calc-ban. Ha az UTF-8 kódolást választom. Hiába szerepel a script elején a "# coding: utf-8" hogy UTF-8 az alapértelmezett kódolás. A beolvasott szövegben hibásak lesznek az ékezetes karakterek. Viszont ha a kelet-európai (ISO-8859-2) kódolást választom, akkor jó az import. Ezt nem igazán értem miért. A kérdésem pedig, hogy hogy tudnám helyesen UTF-8 kódolással beolvasni? -
cousin333
addikt
A Qt egy C++ alapú keretrendszer GUI-k létrehozására. A Designer tudtommal az ő programjuk, így teljesen független a Pythontól.
Az Anaconda alapvetően egy jó disztribúció: tehát Python (2.7 vagy 3.5) + fejlesztőeszközök (pl. IPython, Spyder) + egy tonna külső fejlesztésű modul (numpy, scipy, matplotlib... stb.) vannak benne. Frissíteni, újat telepíteni meg a conda nevű, Linux csomagkezelőhöz hasonló programmal lehet.
Pl. telepítés:
conda install pyvisaMinden csomag frissítése:
conda update --allui: Az Anaconda elég nagy méretű, de van egy ún. Miniconda, ami csak az alapokat tartalmazza és a conda-t az esetleg hiányzó csomagok letöltéséhez.
-
boneyard
tag
Sziasztok!
Egy nagyker webshop termékadatlapjairól szeretném begyűjteni a készletszámokat. Ahhoz, hogy ezek megjelenjenek, előtte be kell jelentkezni.
Eddig VBA-s macron kívül mást nem írtam, úgyhogy googleből keresgéltem.Addig eljutottam, hogy letöltöttem a sitemap-ot, amiből kigyűjtöttem csak a termékadatlapok linkjeit.
Megírtam a scriptet, ahol a Selenium PhantomJS webdriver segítségével szépen bejelentkezik a nagyker felületre, aztán következik ez:driver.get('01-termékadatlap-linkje')
adatlap = driver.page_source
soup = BeautifulSoup(adatlap, "html.parser")
print soup.title.string
if (soup.find('span', class_='onStock') is not None):
print(soup.find('span', class_='onStock').string)
else:
if (soup.find('span', class_='outOfStock') is not None):
print(soup.find('span', class_='outOfStock').string)
else:
print('Megszűnt')Szépen megjelenik a title, alatta pedig vagy a darabszám, vagy Elfogyott vagy Megszűnt felirat.
Amit szeretnék, hogy ezt a részt megismételje az összes kigyűjtött adatlap linkkel és az eredményeket ne csak az ablakba printelgesse ki, hanem egy külön fájlba.Megoldható ez valahogy?
-
cousin333
addikt
Tehát az első mondatodban QT helyett Tk-t kell érteni?
A helyzet az, hogy a GUI egy olyan téma, amit én is kerülgetek, mint a forró kását. Inkább az egyszerűbb, "szkriptesebb" irányba mentem el, ami az IPython Notebook (újabb nevén Jupyter Notebook) használatát jelenti a klasszikus adatgyűjtés-feldolgozás-ábrázolás-mentés négyes mentén, változó sorrendben.
De terveim közt szerepel "rendes" GUI-k létrehozása is. Eddig arra jutottam, hogy Qt-t használok majd. Létezik hozzá egy Qt Designer nevű program, amivel a klasszikus drag'n'drop-pal tudod megtervezni a felületet (hasonlóan a LabView-höz vagy CVI-hoz). A program kimenete egy ui kiterjesztésű fájl. Ezt a Python programodba az alábbi kóddal - vagy ennek megfelelő módosításával - lehet beilleszteni (itt találtam):
import sys
from PyQt4 import QtGui, uic
class MyWindow(QtGui.QMainWindow):
def __init__(self):
super(MyWindow, self).__init__()
uic.loadUi('mywindow.ui', self)
self.show()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = MyWindow()
sys.exit(app.exec_())Innentől az UI elemeit a Python kódból tudod piszkálni. A szokásos csúszkák, gombok, kapcsolók mellett az egyik ilyen lehetséges elem a Matplotlib widget, tehát tulajdonképpen egy grafikon felületet integrálhatsz az UI-ba.
A fenti módszert már kipróbáltam és működött, de élesben még nem használtam. A WinPython nevű Python disztribúcióban minden benne van, de pl a cross-platform Anaconda-ban is szinte minden, a Qt Designer meg egy külön telepíthető program.
Számomra a "végső megoldás" egy olyan program lehetne, amiben a GUI elemek mellett egy nagyobb szövegmezőbe érvényes Python kódot lehet írni és futtatni, ezáltal egyesíthetném a GUI-alapú előre megírt programok előnyeit egy Python-féle szkriptnyelv rugalmasságával.
-
tvamos
nagyúr
válasz
cousin333
#556
üzenetére
Tavaly QT-vel szenvedtem, de aztan kiderult, hogy lehet ezt ugyesebben is, de akkor kifutottam a projekttel az idobol, es elakadt a tanulas.
Most szeretnek a ugy nekiindulni, hogy mar valami egyszerubb megoldast hasznalok.
A konkret feladat az lenne, hogy a gep elinditja a tapegyseget egy uzenettel a soros porton, olvassa a poton, amit kuld egy VA mero, es amikor eloall a trigger feltetel, akkor olvasna az oscilloscope-omat. Ez nagyjabol meg is van, menti a meresi eredmenyeket idobelyeggel.
A gond az, hogy kene valami perzisztencia kijelzest irni, mert mindig excelben csinalni az nem annyira jo. Persze, mukodik, es jo is, meg miden, csak megis na, jo lenne valami realtime kijelzes.
Szeretnem a vegen az egeszet PC-rol RPi-re portolni. Szoval Linuxos felulet igazan jo lenne, de igazabol az lenne a legjobb, ha Linuxon, meg Windowson is menne a programom. Itt egy kicsit elvesztem a soros port kivalasztasaban. Jo lenne azt is GUI-n... -
tvamos
nagyúr
válasz
cousin333
#549
üzenetére
Koszonom, hogy probalsz segiteni!
Igen, olyasmire gondoltam, csak nem szretnem kifizetni a LabView-t, meg tetszik a Python, szeretnem egy kicsit megtanulni.
Igen, valodi muszerek vannak, van gyari, meg sajat fejlesztesu (penzhianybol kifolyolag, mivel nincs mindig par millio egy Agilent, Tektronix, stb. muszerre, de nem kell nagyon komoly dolgokra gondolni, egy-ket kis MCU-s kapcsolas, log a soros porton, ilyesmi) is, ezeket probalom automatizalni, szinkronizalni a merest kulso esemennyel, a meresi ertekeket lementeni gepre.
-
DrojDtroll
veterán
Végül egy ilyen megoldást kaptam. Elég jól működik. Az meg nem zavar hogy kell hozzá a shell, mert úgyis linux alá kell a dolog.
-
EQMontoya
veterán
válasz
DrojDtroll
#550
üzenetére
Nem.
Sok okból nem, de talán a legfőbb, hogy a cmd csak akkor adja át az argumentumot a programodnak, amikor lenyomod az entert. Tehát addig semmilyen interakciót nem tudsz létrehozni.
A google és hasonló megoldások (intellisense pl.) nyilván eventek alapján működnek egy adott kódon belül.
Egyébként az autocomplete egy elég bonyolult dolog, ha nem vagy túlzottan gyakorlott programozásban, akkor elég komoly fába vágtad a fejszét.
Címkereséshez írtunk anno smartkeyboardod (gyakorlatilag ugyanaz a lényeg, mint itt: csak azokat a billentyűket hagyni aktívan, amelyekkel folytatódhat a cím), és ez rohadtul nem egy triviális dolog. -
DrojDtroll
veterán
Meg lehet e csinálni a Google keresőhöz hasonló találat kijelzését cmd-ben?
Olyan kellene, hogy el kezdem gépelni a keresendő stringet, és a megfelelő találatok pl max 10 mindig megjelenne. MInt a Google keresőben. Lehet ilyet?
-
cousin333
addikt
Mint a LabView?

Gondolom a virtuális műszer valami igazinak a leképezése lenne (multiméter, tápegység vezérlés, ilyenek). Nem tudom, meddig jutottál vele és milyen irányból közelítetted meg a témát.
Ami a modulokat illeti: pyvisa, pyserial, numpy, scipy, pandas, ilyesmi. Emellett érdemes megnézni a Qt Designer-t, amivel egyszerűen lehet felületeket kreálni (grafikusan). A WinPython-ban benne van minden.
-
theiron320
aktív tag
Sziasztok!
Azt szeretném kérdezni, hogy ennél :from datetime import datetime as d
import sys
print (d.strptime(sys.argv[1],'%m%d%y')-d(1995,07,07)).daysvan e rövidebb megoldás erre a problémára?(Ez csak egy része). Azért kellene mert házi feladatnál be kell férjek egy bizonyos keret alá, már csak 4 byte van pluszba és nem tudom, hogy nézzek más módszert vagy lehet valamit itt is javítani.
Szerk : syst máshol nem használok szóval felesleges neki más nevet adni.
-
cousin333
addikt
válasz
DrojDtroll
#542
üzenetére
Én mondhatni friss szoftver mániás vagyok, ezért nálam a 3-as a nyerő, mert sok mindent rendbe szedtek, ami korábban kicsit szét volt csúszva: pl. range vs xrange, zip vs izip. Valahogy koherensebbnek tűnik az egész. Ma már minden tisztességes modulból találhatsz Python3-as verziót, szóval szerintem ez sem lehet kifogás.
A 2-es viszont kiforrottabb (bár így a 3.5 megjelenése után már ezt sem feltétlenül mondanám) és még mindig elterjedtebb. Ha korábbi kódot kell kiegészíteni, akkor egyértelmű a választás.
Ami nem tetszik annyira a 3-asban, az a sztring-bájt szétválasztás és a print függvény, bár nyilván mindkettőt jó okkal változtatták meg.
-
cousin333
addikt
Milyen témára kéne elsősorban? Azaz mire szeretnéd használni? Léteznek általános célú könyvek, meg specifikusabb tematikájúak is. Attól is függ, milyen stílust szeretsz: ami jó alaposan körbejárja, a témát, vagy ami a második bekezdésben már webszerver kódot közöl.
Előbbire jó példa lehet a Mark Lutz féle Learning Python, ami elég alapos, helyenként talán túlságosan is. Vagy mondjuk a Think Python.
Utóbbiak sokan vannak, előbb szűkíteni kell a kört. Például Think DSP, az A Primer on Scientific Programming with Python vagy a Numerical Methods in Engineering With Python 3 esetleg a Python for Signal Processing. Ezeket kevéssé ismerem, de igényesnek tűnnek.
Mindezek az általános tudást alapozzák meg. Egyébként pedig meg kell ismerkedni a Python ökoszisztémával (pl. Spyder, PyCharm, Jupyter Notebook) és a hasznos modulokkal (pl. Numpy, Scipy, Sympy). Akkor pedig lehet olvasgatni ezek dokumentációját, az általában elég alapos és naprakész.
-
sonar
addikt
válasz
DrojDtroll
#542
üzenetére
Igazából tök mindegy. Az élet dönti el, hogy ki mit használ. Én speciel rá vagyok kényszeritve a 2.7-re (esetenként 2.5,2.4) De haladni kell a korral ezért ha lehetséges akkor meg meg próbálkozom a 3-assal.
-
DrojDtroll
veterán
Én egyébként a Python 2-vel szimpatizálok.
Ki hogy van ezzel?
-
J. Lovelace
újonc
Én is abból a könyből tanulok, időnként be kell pótolni pár zárójelet, de amúgy teljesen jól használható. Plusz még ezt olvasgatom: http://blog.molnardenes.hu/python-programozas-kezdoknek/
-
cousin333
addikt
Én anno ezzel kezdtem: Gérard Swinnen: Tanuljunk meg programozni Python nyelven
Már egy kicsit régi, de az alapoktól kezdi.
Angol nyelvű könyv is jó?
-
EQMontoya
veterán
Csak a hivatalos Python oldalon lévő tutorialt tudom ajánlani, az szerintem tök jó, de az is épít programozói alapismeretekre. Javaslom, hogy mellé valami általános programozással kapcsolatos könyvet olvass, ami nem a nyelvet magyarázza, hanem a függvények, algoritmusok és mindenféle hasonlók működését.
-
Riko88
csendes tag
Sziasztok!
Python programozást szeretnék tanulni,az a kérdésem hogy van-e valami könyv vagy hasonló ami alapján lehet tanulni?Lehetőleg magyar legyen.Mark Summerfield Python 3 című könyvét elkezdtem,de ahhoz kell már alap programozási tapasztalat ami nekem nincsen ...
Előre is köszönöm! -
EQMontoya
veterán
válasz
DrojDtroll
#530
üzenetére
Ha létrehozol egy datetime objektumot, akkor a default year 1900. Tehát ha február 29-et próbálsz létrehozni, az exception, mert 1900 feb. 29 ugye invalid. (100 évente nincs szökőév, és 400 évente van).
Fix: ha Febr. 29 az input, és üres az év, akkor 1904 a default year.

-
EQMontoya
veterán
Hát én ma jót nevettem.
Különösen a megoldáson: íme.
-
DrojDtroll
veterán
Valaki találkozott már olyan scripttel, amely egy hangfájlban megkeresi az ütemeket, és kiírja, hogy mikor(timecode szerűen) vannak ezek?
-
sonar
addikt
válasz
olivera88
#526
üzenetére
Szerintem neked a dátum formázás kell
string to datetime
>>> s = '2010-12-31 23:59:59'
>>> dt = datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S')
>>> print dt
2010-12-31 23:59:59Ide összegyűjtöttem az összes lehetséges konverziót: [link]
Vagy ha string ként jön és úgy kezeled akkor pikk pakk tudsz egyedi formázást is csinálni egyszerű string manipulációval (megfelelő poziciókba beszúrni a kivánt karaktereket) -
olivera88
veterán
Hogyan lehet megadni pythonban h két szöveg közt hagyjon ki helyet? Kötőjellel megtehetném de nem akarok kötőjelet.
Van egy ilyen kód ami kiolvassa dátumot a fájlból aztán ráteszi a képre, és az a bajom vele h egybefolyik szöveg ha nem rakok kötöjelet.
text_line_1 = "run <grib_info key='dataDate' /> <grib_info key='dataTime'/> - <grib_info key='name'/> <grib_info key='stepRange'/> H - <grib_info key='valid-date'/> " -
válasz
gyurkikrisz
#523
üzenetére
KKoszonom meg probalom.

Tegnap sikerult mas modszerrel urllib.urlretrive, es szepen teszi is a dolgat.Ezt a BeautifulSoup-ot meg nézem, mert rendszerint elég sok felesleges infó jön le, és a lényeget nem tudtam kiszűrni

-
cousin333
addikt
válasz
DrojDtroll
#517
üzenetére
Van, több is. Attól is függ, hogyan akarod használni a Python-t.
1. kódszerkesztő (nagyobb programokhoz)
Spyder - talán az egyik legsokoldalúbb, noha nem hibátlan
PyCharm (Community Edition) - talán az egyik legkomolyabb
Ninja IDE - aranyos, de úgy látom, már nem fejlesztik2. interaktív: parancssorból, soroként (mint az IDLE)
Spyder
IPython - A Spyderben is van ilyen interpreter3. kódblokkonként, újra futtathatóan:
IPython Notebook (újabban Jupyter Notebook) - elsősorban kísérletezésre, adatfeldolgozásra, prezentációra. Demo -
DrojDtroll
veterán
Először készítek hosszabb python programot!
Elég sok függvényem van már.
Milyen sorrendben érdekes őket elhelyezni a fájlban?
Ilyen szempontból mik a tapasztalatok?
-
sonar
addikt
válasz
DrojDtroll
#517
üzenetére
Kódszerkesztésre én ezt a hármat próbáltam és kb az alábbi sorrendben használom windows alatt.
- Notepad++ python ident plugginnal (céges környezetben ahol sok a policy meg minden ez a legegyszerűbb)
- Spyder
- Visual Studio + Iron Python modulLinux alatt
- Spyder
- Geany -
cousin333
addikt
válasz
DrojDtroll
#515
üzenetére
Nem csak téged. Ezért (sem) használok IDLE-t...

-
DrojDtroll
veterán
Csak engem zavar, hogy Win alatt az IDLE shelljében nem lehet nyilakkal váltani a régebbi parancsok között?
-
Olyan lehetseges hogy egy egyszeru html oldalt python lement egy text file-bba esetleg bizonyos részét (bizonyos adatokat) ment csak le?
-
cousin333
addikt
válasz
XP NINJA
#512
üzenetére
1. kérdés
A Python lista nem igazán erre való, de van egy elegáns, bár nem triviális megoldás a problémára, ami megvillant valamit a Python tudásából
:szamok = list(range(90)) # A 90 számból álló lista
sor = 6
elem = 15
# tuple-k listája
felosztva = list(zip(*[iter(szamok)] * elem))
# listák listája
felosztva = [list(i) for i in zip(*[iter(szamok)] * elem)]Ha valaki nagyon tömbökkel/mátrixokkal akar szórakozni, akkor mindenképpen a numpy modul ajánlott. Ez a tudományos területen a Python-használat alfája és omegája, viszont nem része az alap Python telepítésnek. Ebben pl. van reshape függvény, ami pont erre való, igaz azt nem listákon, hanem a speciálisabb ndarray tömbökön lehet végrehajtani.
2. kérdés
Erre alapvetően a datetime modul datetime objektuma való, de az dátumot is vár, nem csak órát meg percet. Furcsamód a time objektum nem támogatja a kivonást. Példának ott az #509-es hozzászólásom.
3. kérdés
Ez két lépés. Az első, hogy bizonyos karaktereket le kell cserélni. Ehhez létre kell hozni egy hozzárendelést, ami megmondja, hogy mit mire kell cserélni, majd el kell végezni a cserét. Nem tudom, hogy van-e egyszerűbb módszer.
>>> szoveg = "Árvíztűrő tükörfúrógép"
>>> trans = str.maketrans("áéíöüóőúűÁÉÍÖÜÓŐÚŰ", "aeiouoouuAEIOUOOUU")
>>> szoveg.translate(trans)
'Arvizturo tukorfurogep'Az angol karakterkészlet a string modulban szerepel:
>>> import string
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'Ebből az eltávolitás valahogy így megy:
>>> szoveg = "Szoveg,-amit meg?:akarunk#szurni"
>>> szurt = [i for i in szoveg if i in string.ascii_letters or i in " "]
>>> szurt = "".join(szurt)
>>> szurt
'Szovegamit megakarunkszurni' -
XP NINJA
őstag
Ha van egy listám amiben van 90 szám, azt hogyan tudom olyan formában kiiratni, hogy 6 sorban jelenjen meg, soronként 15 értékkel?
Kérdés 2:
Hogyan lehet bekérni 2 időpontot (óra,perc,mp) úgy, hogy számolni lehessen vele? Pl: A kettő közötti eltelt időt kiszámitani.
Kérdés 3:

A feladatban egy bekért szöveget kell ékezetmentessé alakitani, majd eltávolitani belőle a nem angol ábécébe való karaktereket.
Itt az angol ábécés dolgot nem is értem. Az lenne hogy # * _ ilyenek ne legyenek benne?

-
#82595328
törölt tag
válasz
cousin333
#509
üzenetére
Igazad van és nincs. Jelen pillanatban tényleg elég lenne ciklus nélkül. De ez a ciklus csak a váza lesz majd egyszer valaminek. Most csak a megoldás érdekelt.
Mondjuk kiegészíteném a példafeladatot erre:
Dolgoztam 2015.12.15 - 2016.02.08-ig. Az órabér 10 Ft/h. Páratlan napokon 8, páros napokon 6 órát, 15-e után pedig dupla órabérért dolgoztam. Ezt én már nem tudnám megoldani ciklus nélkül.
De köszönöm még egyszer a segítséget! -
cousin333
addikt
válasz
#82595328
#508
üzenetére
Használd a hozzászólás-szerkesztőben a Programkód gombot, akkor nem rontja el a formázást (pl. behúzást) a fórummotor.
Igazából nem véletlenül gyanakodtam a for ciklus kapcsán, mert jelen esetben a használata teljesen felesleges, sőt kontraproduktív (lassú). Javasolnám a célra a szorzás műveletet.

import datetime as dt
x = dt.date(2015,12,15)
y= dt.date(2016,2,8)
z = y-x
print(100 * z.days)Vagy még szebben:
print("{} forintot kerestem összesen".format(100 * z.days))
-
#82595328
törölt tag
válasz
cousin333
#506
üzenetére
Tehát ha jól értem, akkor ez a ciklus működni fog? Csak este tudom kipróbálni.
import datetime as dt
x = dt.date(2015, 12, 15)
y = dt.date(2016, 2, 08)
z = y-x
for x in range(z.days):
a += 100
print (a)"A fenti példádhoz miért van szükséged for ciklusra?"
Bocsánat kimaradt a mondatból a "minden nap". Tehát a példafeladat ez lenne:
2015.12.15-2016.02.08 között kerestem minden nap 100 Ft-t. Hány Ft-ot kerestem összesen? -
cousin333
addikt
válasz
#82595328
#505
üzenetére
A fenti példádhoz miért van szükséged for ciklusra? Amúgy a dátumhoz és azok kezeléséhez jó a datetime modul. Példa a használatára:
>>> import datetime as dt
>>> x = dt.date(2015, 12, 3)
>>> x
datetime.date(2015, 12, 3)
>>> y = dt.date(2016, 1, 12)
>>> y
datetime.date(2016, 1, 12)
>>> z = y-x
>>> z
datetime.timedelta(40)
>>> z.days
40
>>> type(z.days)
<class 'int'> -
#82595328
törölt tag
Egy for ciklust szeretnék, ami így nézne ki:
for x in range (dátum1, dátum2):
Azaz annyiszor fusson le, ahány nap van két dátum között.
azaz így is jó lenne:
for x in range(dátum2-dátum1):Nézegettem a time és a calendar modult, de nem láttam benne olyan funkciót, mint az excel-ben. Hogy a dátumot egy számmá lehetne alakítani.
Értelemszerűen az év, hónap,nap külön külön számmá alakítása nem jó, mert évváltásnál rossz eredmény születik.
20160101-20151231= ennek 1-nek kellene lenni és nem 8.870-nek.Tehát mondjuk a feladat, amit meg szeretnék oldani:
2015.12.15-2016.02.08 között kerestem 100 Ft-t. ? Ft-om van? -
-
XP NINJA
őstag
válasz
cousin333
#500
üzenetére
Még egy kérdés (#496)-hoz kapcsolódva: Megvan egy darab listában az összes szám, az általad leirt módszer alapján, meg is csináltam vele egy feladatot. A következőben már szükséges lenne hogy integer legyen az összes szám. Régebben sikerült megcsinálnom, de most sehol sem találom.
Tehát most igy néz ki:
x=['37', '42', '44', '61', '68']És ezt szeretném:
x=[37, 42, 44, 61, 68]Próbáltam int-tel és map-pal is de nem jött össze

-
olivera88
veterán
válasz
cousin333
#499
üzenetére
Így?
import urllib as ur
link = "http://dcpc-nwp.meteo.fr/services/PS_GetCache_DCPCPreviNum?token=__5yLVTdr-sGeHoPitnFc7TZ6MhBcJxuSsoZp6y0leVHU__&model=ARPEGE&grid=0.1&package=SP1&time=61H72H&referencetime=2016-01-26T12:00:00Z"
mport time
links = link.split("=")
t = time.localtime()
fmt = "%Y-%M-%dT12:00:00Z"
links[-1] = time.strftime(fmt, t)
link = "=".join(links)
where = '/home/oliver/SP1'
name, header = ur.urlretrieve(link, where )
Új hozzászólás Aktív témák
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Erősítő, hangfalak
- Samsung kuponkunyeráló
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Milyen okostelefont vegyek?
- Samsung Galaxy Felhasználók OFF topicja
- Telekom mobilszolgáltatások
- Kecskemét és környéke adok-veszek-beszélgetek
- Akvarisztika
- Azonnali fáradt gőzös kérdések órája
- További aktív témák...
- BESZÁMÍTÁS! Gigabyte H610M i3 12100F 16GB DDR4 512GB SSD RX 5700 8GB Zalman Z1 PLUS ADATA 600W
- ÁRGARANCIA!Épített KomPhone i5 14600KF 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- GYÖNYÖRŰ iPhone 14 Pro 128GB Space Black-1 ÉV GARANCIA - Kártyafüggetlen, MS3781
- MSI 14 Modern C12M FHD IPS i7-1255U 10mag 16GB 512GB SSD Intel Iris XE Graphics Win11 Garancia
- BESZÁMÍTÁS! MSI B650 R7 7800X3D 32GB DDR5 2TB SSD RTX 5070Ti 16GB Asus ROG Strix Helios GX601 750W
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest




:










