Kezdőoldal » Egyéb kérdések » Egyéb kérdések » Hulye ekrdes es nagyon egyszer...

Hulye ekrdes es nagyon egyszeru, ezt hogy kell megcsinalni pythonban? 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5

Figyelt kérdés

2022. okt. 16. 17:53
1 2
 11/18 anonim ***** válasza:
37%
[print(i * f'{i} ') for i in range(5)]
2022. okt. 17. 20:40
Hasznos számodra ez a válasz?
 12/18 zozo256 válasza:
37%

Ez az igazi egy soros:


print(*((i * f'{i} ')[:-1] for i in range(1, 6)), sep='\n')


Ez nem abuse-olja a list comprehension-t abból a szempontból, hogy nem ül rá a print mellékhatására.

2022. okt. 19. 13:08
Hasznos számodra ez a válasz?
 13/18 anonim ***** válasza:
32%
12. Szép viszont így abuzálsz egy int * str műveletet, ami ugyan legit a Pythonban, de egy normálisabb nyelv ettől hátast dob. :) Ez már PHP, JS szintű hekk. :)
2022. okt. 19. 13:33
Hasznos számodra ez a válasz?
 14/18 zozo256 válasza:
37%

Hát, más dolog a kettő. Amikor stringet int-tel szorzok, az a python-ban azért lett kitalálva, hogy ismételgessük az adott stringet, tehát ebből a szempontból nem abuzálok. Míg egy list comprehension arra, lett kitalálva, hogy gyorsabban, egyszerűbb szintaxissal építsen egy listát. Ebben a feladatban nincsen szükség lista építésére a print-elés szempontjából. Ha REPL-ben futtatjuk a 11-es kódot, akkor láthatjuk is, hogy visszaprintel nekünk egy None-okkal teli listát, amire semmi szükségünk nincs, és ráadásul sehogy nem kötődik az a lista a feladathoz.

Igaz az én kódomban sincs feltétlen szükség generator-t építeni, és azt szétszorni a print argumentumaiba, de itt nincs szó arról, hogy bármilyen python feature nem úgy lett használva, amire tervezve lett.

Kicsit továbbvíve a dolgot. List/set/dict comprehension segítségével igazából szinte tetszőleges python programot egy sorosra tudunk redukálni kb.

[exec(block) for block in blocks]

Ahol a blocks valamilyen container (list, tuple,...), ami tartalmazza az összes kódblokkot (string-ként) ami a legkülső indentációnál kezdődik. A blocks elemeit pedig helyben ki lehet tölteni kód string-ekkel, \n és \t-ket belerakva sortöréshez és indentációhoz.

Sőt kicsit továbbcsavarva az egész kód stringe-et ami a fájlban van mondjuk be lehet adni egyetlen argumentumként az exec-nek, sortörések nélkül, \n és \t használatával.

Na és még ott van az a kérdés, hogy mi számít különböző sornak :D

Tényleg arra gondolunk, hogy a fájl, ami tartalmazza a kódot hány sort tartalmaz, vagy arra, hogy hány értékes kódsor van, pl. line continuation karakterrel ugye össze lehet fűzni két különböző sort, amit már a tokenizer is kiszűr, és ő egy sornak látja.

Szóval nem egyszerű ez az egysoros dolog :D

2022. okt. 19. 14:33
Hasznos számodra ez a válasz?
 15/18 anonim ***** válasza:
0%
Persze, így van. Én az eredeti 9-es válaszomat viccnek szántam, igyekeztem beletenni pár bonyolultabb dolgot, azért lett ilyen hosszú. De az egyszerűségi versenyben a tied jobb. 🤝
2022. okt. 19. 14:36
Hasznos számodra ez a válasz?
 16/18 anonim válasza:
51%

Mit kell túlbonyolítani?


pár órát fektettem bele, és itt a hatlmas eredmény:


for i in [1, 2, 3, 4, 5] :

print((i) * str(i))

2022. nov. 24. 20:13
Hasznos számodra ez a válasz?
 17/18 anonim válasza:
51%
Mármint összesen a programozásban van pár órám, tegnap kezdtem el tanulni
2022. nov. 24. 20:13
Hasznos számodra ez a válasz?
 18/18 zozo256 válasza:
55%
Ez nem túlbonyolítás, itt művészet folyik kérem :D
2022. nov. 25. 23:23
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!