Perl 6 book
És végre van ilyen is: http://goo.gl/I9H2tz
- Tovább (Perl 6 book)
- 1836 megtekintés
És végre van ilyen is: http://goo.gl/I9H2tz
Sziasztok.
Egy NMEA-checkert szeretmék pythonban, de paranoid módon, azaz minden lehetséges sentence-hibánál dobja az egész sort.
Eddig perlben és javascriptben tudtam megoldani ezt.
Levadásztam innen-onnan 2 kódot, ezeket egyberaktam, most így fest:
#!/usr/bin/env python
import re
""" Calculate the checksum for NMEA sentence
from a GPS device. An NMEA sentence comprises
a number of comma separated fields followed by
a checksum (in hex) after a "*". An example
of NMEA sentence with a correct checksum (of
0x76) is:
GPGSV,3,3,10,26,37,134,00,29,25,136,00*76"
"""
def check_nmea0183(s):
"""
Check a string to see if it is a valid NMEA 0183 sentence
"""
if s[0] != '$':
print "nem jol kezdodik"
if s[-4] != '*':
print "nem jol vegzodik"
def checksum(sentence):
""" Remove any newlines """
if re.search("\n$", sentence):
sentence = sentence[:-1]
nmeadata,cksum = re.split('\*', sentence)
calc_cksum = 0
for s in nmeadata:
calc_cksum ^= ord(s)
""" Return the nmeadata, the checksum from
sentence, and the calculated checksum
"""
return nmeadata,'0x'+cksum,hex(calc_cksum)
if __name__=='__main__':
""" NMEA sentence with checksum error (3rd field
should be 10 not 20)
"""
line = "$GPGSV,3,3,20,26,37,134,00,20,25,136,00*58\n"
check_nmea0183(line)
""" Get NMEA data and checksums """
data,cksum,calc_cksum = checksum(line)
""" Verify checksum (will report checksum error) """
if cksum != calc_cksum:
print "Error in checksum for: %s" % (data)
print "Checksums are %s and %s" % (cksum,calc_cksum)
else:
print "minden ok: ",(calc_cksum)
A kódban az
if s[-4] != '*':
sorban ezek szerint ha a mondat végén lévő \n jelet nézem, akkor azt a python egyetlen karakterként értelmezi.
Kérdés:
Ezt jól értem?
Van egy egyszerű python3 scriptem a while ciklushoz, csak ennyi:
#!/usr/bin/env python3
while True:
s = input('Kérdés')
Elmentettem egy fájlba, amit futtathatóvá tettem.
Ha így futtatom:
python3 whilex.py akkor rendben lefut.
de ha így ./whilex.py akkor hibaüzenetet kapok, hogy nincs ilyen fájl vagy könyvtár.
Ez miért van? Egyszerűen nem értem mi a baja.
Sziasztok.
Mark Summerfield Python3 c. remekműve előtt görnyedek és csak bámulok, hogy ezt a nyelvet miért nem a ZXSpektrumra találták ki régebben. Ezen kellett volna szocializálódnom.
Ha egy vagy több vezérlőszerkezetben semmiféle errorral nem akarom elszállítani a scriptemet, miket tehetek?
Jelenleg van egy while: -szerkezetem, amely indexhibával már nem száll el, mert beleraktam egy sort:
except IndexError:
print('indexhiba, tovabb...')
Amint ezt beraktam a kódba, azóta ha egy sorban nem találja meg monjuk a 6. oszlopot, nem száll el, nem ír ki semmi hülyeséget csak a hibaüzenetet és veszi a következő sort.
-------
A kérdésem rövid.
Van még néhány error-lehetőség, mellyel még nem szállt el a python-script, de talán elszállhat.
EOFError
ValueError
KeyError
OSError
IOError
Ezek között talán a legutolsó érdekelhet még, ha esetleg már nem tud hova írni az adathordozóra a script.
Tehát ha abszolút paranoiásan nézem a dolgokat, hányféle errorkezelést érdemes beépíteni egy mezei scriptbe, amit nem akarok leállítani semmiképp se, hiszen folyamatosan kapja a feldolgozandó sorokat?
Elég az indexhiba és az IO-hiba?
#!/bin/bash
clear
echo 1 - 33
echo 2 - 34
if [[ 33 < 34 ]]; then
echo "az első szám a kisebb"
else
echo "A 2. szám a nagyobb"
fi
echo -e " \n \r"
echo 1 - 33.0.1990.58
echo 2 - 33.0.1990.115
if [[ 33.0.1990.58 < 33.0.1990.115 ]]; then
echo "az első szám a kisebb"
else
echo "A 2. szám a nagyobb"
fi
Az eredmény:
1 - 33
2 - 34
az első szám a kisebb
1 - 33.0.1990.58
2 - 33.0.1990.115
A 2. szám a nagyobb
Mind a kettő eredmény helyes, de ez így szvsz nem konzekvens. Miért nem egyformán írta ki hogy az első szám a kisebb?
Ez egy verzió ellenőrzéshez kell egy scriptben, s természetesen a nagyobb szám a jobb.
Sziasztok!
Sok év rendszergazdaság után (hardveres és Főleg Win, kevesebb Linuxx) 50+ useres cégnél, 40 felé közeledve nem szeretnék már asztal alatt bujkálni, és UTP kábeleket szerelni. Le is építettek a cégnél, van most munkám, de sajnos nem IT.
Közben megszereztem a Szoftver tesztelő (ISTQB) vizsgát és elkezdtem/elkezdenék programozást tanulni. 17-18 éve fősulin c-t és c++ -t tanultunk, de azóta nem sokat programoztam, legfeljebb php+html+css, a céges weblapok fejlesztésére, karbantartására. Persze nem kellene nulláról kezdeni, hogy mi a for ciklus, stb és az oop elveivel, módszerével is tisztában vagyok.
Szívesen elhelyezkednék tesztelőként, de nem tudom eldönteni, hogy melyik nyelvet tanuljam. A Pythonnal, vagy a Javaval tudnék jobban érvényesülni? Mi a véleményetek. Tudom, mindkettőt kellen, meg még vagy hármat, de egyszerre csak egyet szeretnék a munkám miatt.
Korábban 2 évet dolgoztam Kanadában, van még egy kis, azóta megkopott angol tudásom, ami feleleveníthető. Emiatt angol nyelvterületen is dolgoznék.
Vélemények?
Üdv!
Pythonban a dinamikus metódusok (tehát minden dekorátor nélküli, önreferenciával rendelkezők) lemásolódnak az objektumokkal együtt példányosításkor?
Tehát ha sok példány készül egy osztályról, akkor memória szempontjából hatékonyabb, ha a metódust kiveszem az osztályból és kívül definiálom? Vagy esetleg @staticmethod vagy @classmethod dekorátorral?
Köszi!
Mivel sajnos lassan 1 év eltelte után sem volt képes megoldani a Mandriva/Mageia/Rosa tárolók létrehozását a Vivaldi csapat, holott számtalanszor jeleztem már nekik a problémát, így készítenem kellet egy scriptet mely mindennap le ellenőrzi a csomagokat.
Eleddig simán működött is, de most belekerült a képbe a beta kifejezés, és ez most borította a scriptet annyiban, hogy hiába van meg a legfrissebb verziószám, a fájlnév megváltozott.
Jelenleg 3 lehetséges név közül választhatok.
vivaldi-beta
vivaldi-snapshot
vivaldi-preview
A script a verziószám ellenőrzésére alapul. A már telepített változat számát a $name-$name2 --version-nal kapom meg. Persze kell egy kis awk, mert nem csak simán a számot írja ki.
A behelyettesítés meg ezt dobja ki: vivaldi-snapshot-1.0.303.52-2.x86_64.rpm
Persze hogy nem jó.
Most egy subrutinnal megtudom mind a három legfrissebb csomag verzió számát. De itt elakadtam hogy azt hogy is érvényesítsem.
Tehát a subrutin eredményei a következők:
vivaldi-beta-1.0.303.52-2.x86_64.rpm
vivaldi-preview-1.0.219.50-1.x86_64.rpm
vivaldi-snapshot-1.0.303.48-1.x86_64.rpm
Most ebből kell megadnom hogy melyik települjön. A verziószám alapján a beta a legfrissebb.
Ha esetleg nem is így kéne kiindulnom, akkor itt a szerver és a szűrés:
name="vivaldi"
new_version=$(curl -ks https://repo.vivaldi.com/archive/rpm/x86_64/ | sed 's/.*href="//' | sed 's/".*//' | grep '^[a-zA-Z].*' | grep -v repodata | grep ${name}-${name2} | sort -r | head -n1
Próbálkoztam a fájlnév manipulálással ezen a módon: ${filename%%-*}" v1agy ${filename##--*} de ez nem jó.
Ajánljatok nekem jó online könyvet Python tanuláshoz, 0-ról. Lehet angol, magyar nyelvű. Köszi
Sziasztok!
Írtam egy egyszerű evolúciós algoritmust, ami kb. így néz ki:
Populáció objektum egy lista típusú attribútumában sok Individual objektum van.
Populáció objektumnak van egy run() metódusa, ami levezényli a futást.
Szeretném a kódomat párhuzamosítani, hogy pl. minden processzormagon futtatni tudjak egy-egy populációt. Eddig még nem párhuzamosítottam, így valószínűleg infohiányos is vagyok.
A multiprocessing modullal próbálkoztam, írtam egy wrapper metódust, ami létrehozza a populáció objektumot és lefuttatja azt.
Létrehoztam a process-eket, minden process a wrappert hívja.
A kérdésem az, hogy egy ilyen populáció objektumot milyen shared memory object-tel tudnék kinyerni a subprocessekből miután lejárt a futás?
Köszi!