Új hozzászólás Aktív témák
-
Hege1234
addikt
sziasztok!
szeretném megoldani, hogy ha nem lett bejelölve a python win installálásnál az add to path
akkor futtatva a script-et, hozzáadja a PATH-hoz, és akkor nem kell újrainstallálni vagy manuálisan szórakozni vele..mivel minden ilyen módosításhoz admin jog kell, lehetséges lenne ezt python alól megoldani?
ilyesmivel próbálkozok, de mivel nem ad ki írási hibát így gondolom még csak meg se próbálja hozzáadni
import os
spec_python_ver = input('add python dir: (eg.: Python39) write here: ')
scripts_dir = os.path.join(os.environ['LOCALAPPDATA'], f'Programs\\Python\\{spec_python_ver}\\Scripts\\')
python_dir = os.path.join(os.environ['LOCALAPPDATA'], f'Programs\\Python\\{spec_python_ver}\\')
dirs_to_add = [scripts_dir, python_dir]
for directory in dirs_to_add:
if directory not in os.environ['PATH']:
os.environ['PATH'] += os.pathsep + directory
print(f"'{directory}' added to PATH")
else:
print(f"'{directory}' already in PATH")
print("\nUpdated PATH:")
print(os.environ['PATH'])[ Szerkesztve ]
-
válasz Hege1234 #4251 üzenetére
Kornyezeti valtozokat dictionary-kent kell kezelni Python alatt, tehat az ertek, amit be akarsz allitani, string kell, hogy legyen.
Viszont amihez admin jog kell - eleg rohejes lenne, ha egy ilyen egyszeru scripttel meg tudnad kerulni - azt vagy adminkent inditod, vagy UAC promptot kapsz.
https://www.coreinfinity.tech
-
sztanozs
veterán
válasz Hege1234 #4251 üzenetére
User Path valtozohoz nem kell admin jog. Miert nem adod hozza kezzel (vagy CMD fajllal)?
Ha nincs python a path-on, akkor hogy futtatod ezt a python fajlt?[ 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 #4253 üzenetére
Ha nincs python a path-on, akkor hogy futtatod ezt a python fajlt?
hát erre valóban nem gondoltam, így hogy nálam az már hozzá van adva a path-hoz
és akkor egy cmd-vel vagy inkább egy .bat fájlt használva megoldható lenne?
@echo off
set /p spec_python_ver=add python dir: (eg.: Python39) write here:
set "scripts_dir=%LOCALAPPDATA%\Programs\Python\%spec_python_ver%\Scripts\"
set "python_dir=%LOCALAPPDATA%\Programs\Python\%spec_python_ver%\"
echo scripts_dir: %scripts_dir%
echo python_dir: %python_dir%így az útvonalat megkapom, de batch-el mivel tudom hozzáadni közvetlenül a PATH-hoz?
-
sztanozs
veterán
válasz Hege1234 #4254 üzenetére
setx + kozvetlen registry mokolas:
@echo off
WHERE /q python.exe
IF ERRORLEVEL 1 (
set /p spec_python_ver=add python dir: (eg.: Python39) write here:
set "scripts_dir=%LOCALAPPDATA%\Programs\Python\%spec_python_ver%\Scripts\"
set "python_dir=%LOCALAPPDATA%\Programs\Python\%spec_python_ver%\"
for /f "usebackq tokens=2,*" %A in (`reg query HKCU\Environment /v PATH`) do set
userPATH=%B
setx PATH "%userPATH%;%scripts_dir%;%python_dir%"
)[ 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
-
-
sztanozs
veterán
válasz Hege1234 #4259 üzenetére
Ez az elsot felveszi es belerakja a path-ba:
@ECHO off
setlocal EnableDelayedExpansion
WHERE /q python.exe
IF ERRORLEVEL 1 (
WHERE /q /R %LOCALAPPDATA% python.exe
IF ERRORLEVEL 1 (
ECHO Nincs installalt python a APPDATA LOCAL-ban!
EXIT /b -1
) ELSE (
ECHO Van installalt python a APPDATA LOCAL-ban!
)
CALL :sub
set "scripts_dir=!py_path!Scripts\"
set "python_dir=!py_path!"
for /f "usebackq tokens=2,*" %%A in (`reg query HKCU\Environment /v PATH`) do set userPATH=%%B
ECHO "!userPATH!;!scripts_dir!;!python_dir!"
setx PATH "%userPATH%;%scripts_dir%;%python_dir%"
)
GOTO :eof
:sub
FOR /f "tokens=*" %%A IN ('WHERE /R %LOCALAPPDATA% python.exe') do (
REM ECHO %%A
SET "py_path=%%~dpA"
EXIT /b
)
GOTO :eof[ 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
-
Hege1234
addikt
válasz sztanozs #4263 üzenetére
nem én írtam egy sorba, és fura is volt így ömlesztve látni
viszont nem gondoltam, hogy problémát okozhatna mert
kb. minden powershell-es line-ba amit találtam a PATH-hoz az elválasztás az ez volt hozzá;
$env:Path -split ';'
( ha új sorba van írva akkor nem si kerül a végére a
;
) -
J0shu4M1ll3r
senior tag
Sziasztok!
Az alábbi csodálatos háziban kérnék segítséget:
Próbáltam felírni a sorokat, átlókat egyenletként, de bele is zavarodtam, és chatgpt se nagyon segít, vagy nálam vacakol a VS, mert semmi megoldást nem ad vissza.
Mi a jó megközelítése?
Jelenleg itt tartok:
Elneveztem a pontokat betűkkel és beírtam a fix számokat:
1. 1+C+F+H=26
2. 1+D+G+K=26
3. 2+C+D+E=26
4. H+I+7+K=26
5. 2+F+I+L=26
6. E+4+7+L=26
Ezekből kijött pár betűnek a meghatározása, mintha egy nagy egyenletrendszer lenne, de itt elakadtam.
Köszi!"There are things you can't fight. Acts of God. You see a hurricane coming, you get out of the way. But when you're in a Jaeger, suddenly, you can fight the hurricane. You can win."
-
axioma
veterán
válasz J0shu4M1ll3r #4265 üzenetére
Szerintem itt brute force [vagy max elagazas-korlatozassal megoldasra ha mar advanced] gondoltak. A 8! nem olyan nagy szam... plane hogy a pythonhoz lib van ami legeneralja a permutaciokat ;-) de gondolom az inkabb a feladat lenyege lenne.
[ Szerkesztve ]
-
kovisoft
őstag
válasz J0shu4M1ll3r #4265 üzenetére
Ha valamilyen backtrack-szerű algoritmust akarsz használni, akkor a számokat ne egyedi változókban tárold, hanem pl. tömbben, és akkor egységesen tudod tölteni őket. A feltételeidet ugyanúgy fel tudod írni pl. 2+X[0]+X[1]+X[2]+X[3]==26 formában,
De talán az axioma által is említett permutáció generálás a legegyszerűbb: az itertools modul permutations([3,5,6,8,9,10,11,12]) függvényével le tudod generálni a maradék nyolc szám összes permutációját, ezek közül kell azokat kiválogatni, ahol minden vonalra teljesül, hogy a számok összege 26.
-
J0shu4M1ll3r
senior tag
Próbálom értelmezni, de nem megy
Látnom kéne a teljes kódot, hogy ki tudjam sakkozni, hogy mi miért történik, de azt sem tudom, hogyan fogjak hozzá."There are things you can't fight. Acts of God. You see a hurricane coming, you get out of the way. But when you're in a Jaeger, suddenly, you can fight the hurricane. You can win."
-
sztanozs
veterán
válasz J0shu4M1ll3r #4265 üzenetére
1. szamozd be a cellakat 0-11-ig:
2. csinalj egy teljes permutaciot:
3. meccseld a permutaciot a szabalyra:
doboz[0] == 1
doboz[3] == 4
doboz[5] == 7
doboz[10] == 2
es az z osszegre vonatkozo logika:
doboz[0] + doboz[1] + doboz[11] == 26
doboz[1] + doboz[2] + doboz[3] == 26
doboz[3] + doboz[4] + doboz[5] == 26
doboz[5] + doboz[6] + doboz[7] == 26
doboz[7] + doboz[8] + doboz[9] == 26
doboz[9] + doboz[11] + doboz[11] == 26JOGI 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...
-
kovisoft
őstag
válasz J0shu4M1ll3r #4268 üzenetére
Permutációval roppant egyszerű a dolog. Egy ciklusban végigmész a permutations([...]) által visszaadott listán, aminek mindegy eleme egy mondjuk x tömb lesz az aktuális permutációval. Az x tömb a nyolc ismeretlen számot jelöli (x[0]-tól x[7]-ig). Ezekre beteszel 6 darab if-et (olyasmit, mint amit te is felírtál, csak nem egyedi változókkal, hanem a tömb elemeivel), amiben ellenőrzöd az egyes vonalak mentén az összegeket. Ha bármelyik nem 26, akkor continue. A legvégén pedig kiiratod az x-et.
Házi feladatokat nem igazán oldunk meg más helyett, de ha van bármi kód kezdeményed, és elakadsz, akkor szívesen segítünk.
Szerk: Csak egy megjegyzés, hogy ne zavarjunk még jobban össze: én a fix számokat nem vettem bele a permutációba, mint sztanozs. Én csak a 8 ismeretlent permutálnám.
[ Szerkesztve ]
-
sztanozs
veterán
válasz sztanozs #4269 üzenetére
ja, haromszogeket szamoltam, nem oldalakat, azert nem adott ki eredmenyt
from itertools import permutations
def szabaly(doboz):
a, d, f, k = 1, 4, 7, 2
b, c, e, g, h, i, j, l = doboz
return 26 == a + b + d + e == c + d + f + g == e +f + h + i == g + h + j + k == i + j + l + a
def print_doboz(doboz):
a, d, f, k = 1, 4, 7, 2
b, c, e, g, h, i, j, l = doboz
print(f" {a:>2}\n"
f"{k:>2} {l:>2} {b:>2} {c:>2}\n"
f" {j:>2} {d:>2}\n"
f"{i:>2} {h:>2} {f:>2} {e:>2}\n"
f" {g:>2}\n")
dobozok = permutations([3, 5, 6, 8, 9, 10, 11, 12])
eredmeny = filter(szabaly, dobozok)
for doboz in eredmeny:
print_doboz(doboz)
print()[ 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...
-
J0shu4M1ll3r
senior tag
válasz sztanozs #4269 üzenetére
Köszi, valami ilyesmire gondoltam én is, de lehet a == is elmaradt, megnézem.
@ kovisoft:
igen, mert gondolom több megoldás is, lehet, pedig sudokuzni szeretek, de ezen csak pislogtam
Nem is kérném, hogy más csinálja meg, pont, hogy meg akarom érteni, hogy mi miért van, de lehet nem fog olyan gyorsan menni, mint gondoltam.
A fix számok kellenek, mert azok adottak, és ezek ismeretében kell kiszámolni a maradék helyekre a lehetséges számokat, így legalább nem lesz 800 megoldás"There are things you can't fight. Acts of God. You see a hurricane coming, you get out of the way. But when you're in a Jaeger, suddenly, you can fight the hurricane. You can win."
-
jerry311
nagyúr
Hi,
Lehete ezt szebben, jobban parositani?
Kiindulo szoveg:
AMRunningMode : Normal
AntispywareSignatureLastUpdated : 29/04/2024 05:36:35
AntispywareSignatureVersion : 1.409.590.0
AntivirusSignatureLastUpdated : 29/04/2024 05:36:33
AntivirusSignatureVersion : 1.409.590.0
NISSignatureLastUpdated : 29/04/2024 05:36:33
NISSignatureVersion : 1.409.590.0
Kivant eredmeny:
7 dictionary elem:
{'AMRunningMode
': 'Normal'
}
{'AntispywareSignatureLastUpdated
': '29/04/2024 05:36:35'
}
{'AntispywareSignatureVersion
': '1.409.590.0'
}
{'AntivirusSignatureLastUpdated
': '29/04/2024 05:36:33'
}
{'AntivirusSignatureVersion
': '1.409.590.0'
}
{'NISSignatureLastUpdated
': '29/04/2024 05:36:33'
}
{'NISSignatureVersion
': '1.409.590.0'
}def parseupdates(dictentry):
# initialize variables
res = {}
cleanlines = []
lines = dictentry.splitlines()
for line in range(len(lines)):
if lines[line].strip(): # remove blank lines
cleanlines.append(lines[line])
for line in range(len(cleanlines)): # split lines at the middle colon
d = " : "
temp = cleanlines[line].split(d)
for idx, element in enumerate(temp): # assign values
res[idx] = element.strip()
for i in range(0, len(res) - 1, 2): # reassemble key value pairs
j = i + 1
workarray[res[i]] = res[j]
-
axioma
veterán
válasz jerry311 #4273 üzenetére
Nem egeszen egyertelmu, hogy ekvivalens kodra vagy-e kivancsi, de mondjuk.
A te logikaddal csak "more pythonic way":def parseupdates(dictentry):
cleanlines = [line for line in dictentry.splitlines() if line.strip()]
d = " : "
workarray = {}
for line in cleanlines:
arr = line.split(d)
workarray[arr[0].strip()] = arr[1].strip()Sot, ha biztos hogy mindig pontosan egy : van benne:
def parseupdates(dictentry):
d = " : "
workarray = {}
for line in dictentry.splitlines():
if line.strip():
a,b = line.split(d)
workarray[a.strip()] = b.strip()Azert a
line
nevet nem jo indexnek hasznalni, foleg hogy a for ciklus pont ki tudja venni a konkret elemet is, nem kell az indexeket kovetni. Ami me'g nagyon idegen, hogy ares
dictionary-nak van inicializalva, kozben tombkent hasznaltad.Hm varj most nezem nem csak egy : -od van a peldaban. Es azokat te se rakod utana ossze... tehat az sztem eleve hozott volna "36":"35" , "36":"33" parokat, es mazlid hogy mind paratlan darab :, amugy me'g jobban keresztbe sikerult volna (nem futtattam, csak gyanitom)
Szoval az eredeti feladatra talan inkabb:
def parseupdates(dictentry):
d = " : "
workarray = {}
for line in dictentry.splitlines():
idx = line.find(d)
if idx != -1:
workarray[line[:idx].strip()] = line[idx+1:].strip()[ Szerkesztve ]
-
jerry311
nagyúr
Hatékonyabb, rövidebb kód volt a cél, mert én Pythonban jelenleg kb. olyan messze vagyok a hatékony programozástól, mint hentes a sebésztől. Ha le kell vágni valamit, akkor az megy, csak nem lesz szép.
Köszönöm!
Ilyesmire gondoltam, mert ugyan a kódom megoldotta a feladatot, de nem tűnt helyesnek, ahogy elértem a megoldást. Lásd pl.res
dictionary/tömb.A : résszel nem volt gond (szerintem), mert a delimiterben előtte és utána is van space. Ilyen csak középen fordul elő.
-
axioma
veterán
válasz jerry311 #4275 üzenetére
Ah, jogos, a szokozok segitettek. De amugy az nem kizarhato, hogy az ertekben olyan is legyen, igy arra szerintem kevesbe jo altalanosan epiteni. Az elso : az mondjuk hihetobb hogy bejon (bal oldal jellemzoen valami azonosito, abban nem lehet).
Nem mondanam hatekonyabbnak ha idoigenyre gondolsz, nincs erdemi kulonbseg, csak olvashatobb-karbantarthatobb. -
sztanozs
veterán
válasz jerry311 #4273 üzenetére
miert kell 7 dict es nem egy dict 7 elemmel?
szoveg='''AMRunningMode : Normal
AntispywareSignatureLastUpdated : 29/04/2024 05:36:35
AntispywareSignatureVersion : 1.409.590.0
AntivirusSignatureLastUpdated : 29/04/2024 05:36:33
AntivirusSignatureVersion : 1.409.590.0
NISSignatureLastUpdated : 29/04/2024 05:36:33
NISSignatureVersion : 1.409.590.0'''
cleanlines = [{k.strip():v.strip() for k,v in [line.split(':', maxsplit=1)]} for line in szoveg.splitlines() if line.strip()][ 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...
-
jerry311
nagyúr
Szvsz, nem nagy a kockazat. Egesz addig jol mukodik, amig az MS nem valtoztat az ido formatumon.
sztanozs
Koszonom neked is.7 dictionary elem:
Ez szamomra 1 dict 7 elemmel. Megvolt mar az elso kave ma?Egyebkent azert dictionary, mert azt eszi a docx-mailmerge.
[ Szerkesztve ]
-
sztanozs
veterán
válasz jerry311 #4278 üzenetére
Nem, ez egy list, 7 dict entryvel:
[{k.strip():v.strip() for k,v in [line.split(':', maxsplit=1)]} for line in szoveg.splitlines() if line.strip()]
[
{'AMRunningMode': 'Normal'},
{'AntispywareSignatureLastUpdated': '29/04/2024 05:36:35'},
{'AntispywareSignatureVersion': '1.409.590.0'},
{'AntivirusSignatureLastUpdated': '29/04/2024 05:36:33'},
{'AntivirusSignatureVersion': '1.409.590.0'},
{'NISSignatureLastUpdated': '29/04/2024 05:36:33'},
{'NISSignatureVersion': '1.409.590.0'}
]
a dict igy nez ki:{k.strip():v.strip() for k,v in [line.split(':', maxsplit=1) for line in szoveg.splitlines() if line.strip()]}
{
'AMRunningMode': 'Normal',
'AntispywareSignatureLastUpdated': '29/04/2024 05:36:35',
'AntispywareSignatureVersion': '1.409.590.0',
'AntivirusSignatureLastUpdated': '29/04/2024 05:36:33',
'AntivirusSignatureVersion': '1.409.590.0',
'NISSignatureLastUpdated': '29/04/2024 05:36:33',
'NISSignatureVersion': '1.409.590.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...
-
sztikac
őstag
Sziasztok, a Learn Python 3 The Hard Way könyvből tanulom a Python-t és van ez a feladat:
from sys import argv
from os.path import exists
script, from_file, to_file = argv
print(f"Copying from {from_file} to {to_file}")
# we could do these two on one line, how?
in_file = open(from_file)
indata = in_file.read()
print(f"The input file is {len(indata)} bytes long")
print(f"Does the output file exist? {exists(to_file)}")
print("Ready, hit RETURN to continue, CTRL-C to abort.")
input()
out_file = open(to_file, 'w')
out_file.write(indata)
print("Alright, all done.")out_file.close()
in_file.close()Ezt teljesen világos is, hogy mit-miért csinál.
Aztán van ugye a feladatok között egy ilyen:See how short you can make the script. I could make this one line long.
Ezzel eddig jutottam (még elég messze vagyok az 1 sortól ):
from sys import argv
script, from_file, to_file = argv
in_data = open(from_file).read()
open(to_file, 'w').write(in_data)
Ez így lefut, rendben le is másolja a megadott fájlt, csak ugye ebben az esetben nincs file descriptorom így nem tudom min meghívni a close()-t. Úgy tudom a program lefutása után az OS úgyis bezárja a nyitott fájlokat, de szabályos ez így?
-
sztanozs
veterán
-
Atomantiii
őstag
Tudna valaki segíteni (akár privát üzenetben is) egy letöltő srcipt készítésében, ahol van egy ilyen szerkezetű fájl, amiben a letöltendő oldalak vannak meghatározva melyik oldalnak mi a pontos elérése. A pdf-eket szeretném, hogy letöltse, már ha lehet olyat.
{
"editionGUID": "602de21a-dd42-4413-bd98-dc89232280fe",
"pagesDomain": "https://valami.com",
"pageGroups": [
{
"pages": [
{
"pdf": "https://valami.com/page1.pdf",
"pageNum": 1,
"type": "page"
}
]
},
{
"pages": [
{
"pdf": "https://valami.com//page2.pdf",
"pageNum": 2,
"type": "page"
}
]
},
{
"pages": [
{
"pdf": "https://valami.com/page3.pdf",
"pageNum": 3,
"type": "page"
stb...
} ] } ] }
-
Atomantiii
őstag
válasz Atomantiii #4286 üzenetére
Bár lehet egyszerűbb kimásolnom a linkeket és megetetni egy letöltő progival.
-
Atomantiii
őstag
válasz Atomantiii #4287 üzenetére
Mégsem teljesen jó ötlet a letöltésvezérlő, mert minden fájlnak ugyanaz a neve csak a más link. Vagyis letöltés közben át is kellene nevezni mondjuk sorszám alapján.
-
Atomantiii
őstag
válasz Atomantiii #4288 üzenetére
Közben megvan a megoldás.
Új hozzászólás Aktív témák
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Ozeki Kft.
Város: Debrecen