Új hozzászólás Aktív témák
-
tvamos
nagyúr
Kiprobaltam, hogy ez mukodik:
harommal_oszthato = [i for i in szamok if i%3 == 0]
De nem nagyon vagom, hogy miert van az "i" a "for" elott, es miert van az "if" utana. De azt latom, hogy ez igy nagyon hatekony.
De lehet, hogy nem kene hasznalnom, mert van, hogy 6-8 honapig nem nyulok Pythonhoz, es kesobb csak megkavarodom tole.[ Szerkesztve ]
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
sztanozs
veterán
raadasul osszetettebben is lehet hasznalni:
pos = [(x,y) for x in range(10) for y in range(10)]
vagy az elozo pelda alapjan:
from random import randint
harommal_oszthato = [i for i in [randint(1,12) for i in range(20)] if i%3 == 0][ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
axioma
veterán
válasz cousin333 #3748 üzenetére
Megint a code golf ;-) Persze tanulashoz kis szamokra jo, de szamitasigenyre nezve eleg hatekonytalan ez a modszer... HA listazni akarod oket akkor teszteleshez inkabb hasznald a korabbi primeket. En kb igy szoktam [feladvanyoknal alt egymillioig kell, es ez most mobilrol kiprobalas nelkul]:
limit=...
primes=[2,3,5,7,11]
act=11
while act+2<=limit:
act+=2
sact=int(act**0.5)
i=1
while primes[i]<=sact and act%primes[i]!=0:
i+=1
if primes[i]>sact:
primes.append(act)
Tehat: csak paratlan szamokat vizsgal, es azokat is csak a 2-nel nagyobb, de gyokenel kisebbegyenlo, korabban megtalalt primekre.
Amugy van konyvtari fuggveny is primtesztre ;-)[ Szerkesztve ]
-
axioma
veterán
De hasznos, nem csak azert mert kevesebb kodsor, hanem atlathatobb es kesobb ma'r lesz majd hogy a listat se allitod elo [tarolod le] ha utana csak 1x vegigmesz rajta, hanem a generalas on the fly tortenik mikor felhasznalod egy kovetkezo lepes inputjakent. Szoval erdemes annyit probalkozni vele, hogy megszokd ezt a fajta irasmodot.
[Az a 'ternary' megvalositasa ami ertheto ugyan de elter mas programnyelvek logikajatol es nem 'prefix(ertelmezes)-mentes' :a=b if c>0 else d
, de ezzel kb. lattad a furasagokat.] -
cousin333
addikt
A kód nem attól lesz jó vagy rossz, hogy mennyire hosszú, hanem hogy mennyire érthető és áttekinthető. A Python segítségével szerencsére tömör és áttekinthető kód írható. Érdemes az alap paradigmákat és a szintaktikát hamar elsajátítani, mert gyorsabbak, átláthatóbbak és hatékonyabbak. Ráadásul így nem készülnek később
for i in range(len(szamok)):
típusú kódok sem.A te példád szerintem nem lett olvashatóbb mint az enyém, de valamivel kétségkívül hosszabb. Ráadásul a "code golf"-ot átírtad "algoritmus golfra" a rekurzivitással. Lehet, hogy hatékonyabb csillió számnál, de sanszos, hogy azt úgysem fogod kilistázni, és különben is a beépített függvényt fogod alkalmazni.
"We spared no expense"
-
cousin333
addikt
Ez a gyakran előforduló alap szituáció, ami egy lista (tágabban: egy iterálható objektum) elemein hajtja végre ugyanazt a függvényt:
lista = []
for elem in elemek:
lista.append(func(elem))
A func() függvényhívásnak ott kell lennie különben egyszerűen csak átmásolnád a listát. Ugyanez rövidebben ún. list comprehension-nel:
lista = [func(elem) for elem in elemek]
Gyakorlatilag a for ciklus belsejét kihoztuk az elejére, elhagytuk az append-et, és az egészből egy egysoros értékadást csináltunk. Az extra [] tulajdonképpen egy "konstruktor", egy "syntactic sugar" (van erre magyar kifejezés?), ami azt mondja, hogy az eredményt listába szeretném rendezni. Írhattam volna ezt is:
lista = list(func(elem) for elem in elemek)
A [] helyett írhatnék mást is, a szándéktól függően: a {} például - kicsit más szintaxis mellett - egy szótárat (dictionary) hozna létre, míg a () egy generátor kifejezést. Ami egyébként megegyezik a fenti példával, csak a list függvény nélkül. Mint látható, Pythonban az egyes szintaktikai elemek ebben az esetben (is) nagyon szépen egymásra épülnek.
Namost az if kifejezés a fentieknek egy speciális esete: nem akarunk minden elemet felhasználni, csak azokat, amik egy bizonyos feltételnek megfelelnek. Mivel ez egy extra, opcionális eset, logikus, hogy a kifejezés végére kerül, ha egyáltalán szerepel:
lista = [func(elem) for elem in elemek if not elem % 3]
Ugyanígy működik a feltételes értékadás is, amit axioma is írt, ami mondjuk C-ben az x = (a) ? m : n.
Pythonban pedig:
x = m if a else n
Ha nem lenne feltétel, akkor csak simán ezt írnánk:
x = m
Látható, hogy a feltételes és feltétel nélküli értékadás ugyanúgy kezdődik, csak előbbi a feltétellel folytatódik.
[ Szerkesztve ]
"We spared no expense"
-
axioma
veterán
válasz cousin333 #3758 üzenetére
OK, a rovidites csak a list compr.-re vonatkozott, es hogy ujra vegigvizsgal felesleges elemekre. Ha a konyvtarit hivtad volna benne nem szoltam volna, de itt konkretan a lista kepzesi modja _miatt_ nem kerulheto ki a teljes vizsgalat per elem (a keszulo lista nem tud be-ki parameterkent megjelenni az ellenorzo fg-ben).
Szerintem nem kell az olvashatosag oltaran felaldozni a kitevot a nagyordoban, erre akartam utalni. Amugy minden mas esetben eljen soka a list comp, surun hasznalom. -
MasterMark
titán
Hello, a
subprocess.run
miért nem akkor fut le amikor a kódban van, hanem rögtön az elején?Switch Tax
-
sztanozs
veterán
válasz MasterMark #3761 üzenetére
Ott kell lefutnia ahol van…
viszont a pythonban nincs normalis szalkezeles, tehat az eredmeny nem biztos hogy olyan lesz ahogy elkepzeles.[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
cousin333
addikt
Mégegyszer: a kódom működik és szerintem jól átlátható. Az eredetileg felvetett megoldás javított kiadása, demonstráció céljára éppen megfelel. Éppen azért nem használom a gyári függvényt, mert az lehet, hogy gyors, de nem látszik a mögöttes logika. Az algoritmus lehetne szofisztikáltabban és optimalizáltabb, de pár száz elemre nem igazán lesz látványos a különbség. Az meg, hogy millió elemre nem a leggyorsabb...
Egyébként list comprehension-nel is megoldható lenne, ha generátor függvényt használok, ami belül számon tartja az addigi prímszámokat. Az sem lenne optimális, mert kétszer tárolnám el a prímlistát.
ui: Így jobban megnézve az én kódomban (#3748) egy fia list comprehension sincs...
[ Szerkesztve ]
"We spared no expense"
-
Hege1234
addikt
sziasztok!
azt gondoltam, hogy a lenti regex az egyben egy sorrendet is jelent
de úgy tűnik nem...
a .sort -ot lehet esetleg regex-el kombinálni?vagy esetleg egy jobb módszer rá, hogy kövesse a regex-ben lévő sorrendet?
a gond, hogy nem csak dash hanem hls link is található a hd-links.txt-ben amire nincs szükségem
hd = open("hd-links.txt").read()
un_sorted = re.findall(r".*1080p.*dash.*|.*dash.*1080p.*|.*720p.*dash.*|.*dash.*720p.*|.*hd_dash.*|.*sd_dash.*|.*dash.*540p.*|.*540p.*dash.*", hd)
un_sorted.sort(reverse=True)
hd_link = un_sorted[0]
print('1080p \ 720p \ 540p: \n'+hd_link)
print(hd_link, file=open("dash.txt", "w")) -
sztanozs
veterán
válasz Hege1234 #3766 üzenetére
Regex nem rak sorba, a pipe csak egy egyszeru OR operator, minden egyezest felkap.
ha sorban akarod feltolteni a listat, akkor csinalj egy listata a regexekkel es ciklusban toltsd be a talalatokat a vegso listaba.hd = open("hd-links.txt").read()
sorted_rex = [r".*1080p.*dash.*|.*dash.*1080p.*", r".*720p.*dash.*|.*dash.*720p.*", r".*hd_dash.*", r".*sd_dash.*|.*dash.*540p.*|.*540p.*dash.*"]
sorted_list = []
for rex in sorted_rex:
sorted_list += re.findall(rex, hd)
hd_link = sorted_list[0]
print('1080p \ 720p \ 540p: \n'+hd_link)
print(hd_link, file=open("dash.txt", "w"))[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
tvamos
nagyúr
Probaltam kesziteni egy drop down menut, de valami gyikja van.
Itt a kod: [link]
A hibauzenet:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.8/tkinter/__init__.py", line 1892, in __call__
return self.func(*args)
File "/home/tomi/Projects/GitHub/TestProjects/PySerialTest/SerialportsDropDown.py", line 68, in scan_serial_ports
self.powerSuplyDrop.config(value=com_ports)
AttributeError: 'Window' object has no attribute 'powerSuplyDrop'Ra tudnatok nezni, miert nem latja a 'powerSuplyDrop'-ot? Hiszen ott van... vagy megsincs?
Amugy addig tetszetosen lefut a kod, hogy kiirja a portokat: ['/dev/ttyS0', '/dev/ttyACM0']
(Es frankon lefut linuxon, meg w10-en is, szoval addig patent.)[ Szerkesztve ]
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
sztanozs
veterán
Nem osztalyvaltozokent hoztad letre, hanme globalis valtozonak. Vagy hozd letre self.powerSupplyDrop-kent vagy hivatkozz ra ugy hogy kitorlod a self. Reszt.
amugy ez nem egy dropdown, hanem egy combobox.JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
tvamos
nagyúr
válasz sztanozs #3770 üzenetére
Igy erted?
powerSuplyDrop.config(value=com_ports)
Mert ha ezt teszem, akkor a kovetkezo hibat dobja:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.8/tkinter/__init__.py", line 1892, in __call__
return self.func(*args)
File "/home/tomi/Projects/GitHub/TestProjects/PySerialTest/SerialportsDropDown.py", line 68, in scan_serial_ports
powerSuplyDrop.config(value=com_ports)
NameError: name 'powerSuplyDrop' is not definedAmugy igen, combobox.
[ Szerkesztve ]
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
sztanozs
veterán
oh, most latom, hogy a kodban nem azt raktad global-ra hanem a powerSuplyPort-ot.
Mindenhol rakd bele az osztaly scope-jaba, ogy lesz a legegyszerubb:
sima powerSuplyDrop helyett mindenhol self.powerSuplyDrop-ot hasznalj (a definicional is).
mobilon nem egyszeru forumozni[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
szuper
global-t pedig celszeru elfelejteni.
Elsore jonak tunhet, de konnyen bonyolithatja a helyzetet kesobb, ha valamiert veletlenul ujrahasznalsz egy valtozot, vagy egy csomag felulcsapja valamiert. Osztaly vagy csomagvaltozot erdemes hasznalni.JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Hege1234
addikt
üdv,
tkinter-el meglehet valahogy oldani, hogy ha egy gomb behoz egy új ablakot
akkor utána átváltson a cmd ablakba?vagy esetleg ctypes-el?
ctypes-el szoktam a cmd ablak-ot elneveznictypes.windll.kernel32.SetConsoleTitleW('____'+'_Decr'+' '+VERSION+'____'+dirPath+'____'+menu02a+'____'+output+'____')
de arra nem találtam semmi megoldást amivel előtérbe lehetne hozni az ablakot -
tvamos
nagyúr
Tudok en olyan python taskot irni, ami a programomban megnyitott osszes com port (2-6) adatforgalmat time stemppel es adat itannyal sniffeli?
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
sztanozs
veterán
válasz Hege1234 #3777 üzenetére
Hirtelen ezt talaltam:
from pywinauto.findwindows import find_window
from pywinauto.win32functions import SetForegroundWindow
SetForegroundWindow(find_window(title='gui title'))illetve ezt: [link]
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
Asszem com port sniffing nem lehetseges, hacsak nem egy kifejezetten olyan hardvert hasznalsz, ami ezt tamogatja (masik csatornan).
Ami meg lehetseges lehet, hogy letrehozol virtualis com portokat es csinlasz egy programot, ami a virtualis es fizikai com portok kozott tolja at az adatokat es azokat logolod: [link]
A programban, pedig amit sniffelni akarsz atallitod a fizikai COM portokrol a forgalmat a virtualisakra.
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
tvamos
nagyúr
válasz sztanozs #3780 üzenetére
Egy com porttal ment a programom, csak mostmar sok van. Amit javasolsz tul nagy erofeszitesnek tunik nekem es az eredmeny lehet, hogy csak rosszabb lesz. Nem tudom.
Talaltam ilyet, hogy interceptty, lehet, hogy ez mukodni fog.
[ Szerkesztve ]
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
sztanozs
veterán
ja, nem volt rola szo, hogy windows vagy linux
windows-on gyakorlatilag azt irja le, amit irtam: [link]
ja2: ha hardver flow-kontrollalt az adatforgalom, akkor nem megy a sniffeles, mert hardver interrupt miatt nem lehet megbizhatoan az allapotot figyelni.
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Hege1234
addikt
válasz sztanozs #3779 üzenetére
ez, ami a linkben volt nagyon király
több mint 40 function-t használok
a különböző menükhöz..és csak bele kellett tennem a menükbe és már
működött is változtatás nélkül
köszi!import win32gui, win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shell.SendKeys('%')
win32gui.SetForegroundWindow(hwnd)
[ Szerkesztve ]
-
Hege1234
addikt
üdv,
hogyan oldható meg, hogy ha egymás alatt lévő sorok vannak
azokat oszlopokba tudjam rendezni?elég macerás, hogy állandóan görgetni kell...
194 sor van ezeket szeretném több oszlopba rendezni
import json
while True:
try:
fgq = open('mycanal.json', 'r', encoding='utf8')
except FileNotFoundError:
print('\n[ERROR] nincs json file\n')
import re
index = 1
title = json.load(fgq)
for thevalue in title.values():
gg = f"{index:03}"+' # '+' - '+thevalue["name"]
print(gg)
index += 1
all = index -1
print('\n összes csatorna: '+str(all)+'\n')
def process(text):
for match in re.finditer(r'(\d+-\d+)|\d+', text):
x = match.group()
if '-' in x:
a, b = x.split('-')
for i in range(int(a), int(b)+1):
yield i
else:
yield int(x)
text = input('\nírd ide a számot: ') -
Na, ilyennel meg nem talalkoztam, van-e otlete vkinek?
Kod:with open(leetFile,'r') as e:
leetList = e.read().splitlines()
if (passToCheck in cpList) or (passToCheck in commonKeyPatterns) or (passToCheck in leetList):
print('Your password found in a common password list, it is a keyboard pattern or leet speak word. Choose a different one. Score: 0')
exit()
P@$$w0rd - nem talalja meg a leetList-ben, holott shellben kikopi, de ott is csak akkor, ha escape-elem a spec karaktereket. Hogyan tudnam ezt megoldani?
https://www.coreinfinity.tech
-
-
kovisoft
őstag
-
-
válasz kovisoft #3790 üzenetére
Nagyon furi. A nehany soros megoldasod mukodik es itt az ominozus reszlet a leetFile-bol:
P@$sw0rd
P@$$word
P@$$w0rd
P@$5word
P@$5w0rd
P@5sword
P@5sw0rdMivel a shellben is gondjaim vannak ezzel, nem lehet, hogy onnan eredeztetheto a problema? Jelen pillanatban zsh-bol megy, megnezem bash-ban.
MOD: bash-ben sem mukodik (nem a zsh-bol inditottam).
[ Szerkesztve ]
https://www.coreinfinity.tech
-
Oke, leszurtem odaig, hogy a "$" jellel van baja...
python ./passcheck.py P@ssw0rd
Your password found in a common password list, it is a keyboard pattern or leet speak word. Choose a different one. Score: 0
python --version
Python 3.9.2[ Szerkesztve ]
https://www.coreinfinity.tech
-
-
kovisoft
őstag
Új hozzászólás Aktív témák
- Kínai, és egyéb olcsó órák topikja
- Napelem
- Milyen processzort vegyek?
- Autós topik látogatók beszélgetős, offolós topikja
- Óra topik
- Netfone
- Hobby elektronika
- XPEnology
- Bugok, problémák a PROHARDVER lapcsaládon
- Kodi és kiegészítői magyar nyelvű online tartalmakhoz (Linux, Windows)
- További aktív témák...