Hogy kell Pythonban hisztogramot rajzolni? Hobbiból próbálkozom a Pythonnal, és elakadtam (milyen meglepő. ). Ez a feladat: Rajzolj egy hisztogramot számok listájából, ahol minden szám a listában egy sort jelöl.
Például, ha az alábbi listánk van: vals = [ 0,2,4,8,4,2,1 ] akkor ezt kellene kirajzolni: ** **** ******** **** ** * ahol az első sorban nincs csillag, a másodikban 2 van, a harmadikban 4 és így tovább. Tipp: két ciklusra lesz szükség, ebből egyik a másikon belül lesz.
Hogy kell egy sorba x db csillagot kiiratni? A két ciklus OK, de minden csillagom új sorba került. Kissé belekavarodtam...
A "minek álltam neki", "ne ezt és ne így" stb. "segítséget" kérlek tartsátok meg! Köszönöm! :)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
1. Inicializálsz egy üres sztring változót
2. Végigmész a tömbön.
3. A tömb adott elemét megszorzod a csillag karakterrel - ez megadja a mintát (szóval 8 * "*" = "********")
4. Ezt hozzáadod az 1. pontban említett sztringhez.
5. Meg egy szóközt.
6. Majd a végén eltávolítod a felesleges szóközt a sztring végéről (strip)
Lehetne funkcionális módon is (map), majd összeilleszteni (join).
Ezer köszönet, nem mindent értettem, de sikerült (kicsit rovidebb listával):
lista = [0,2,4,8,4,2]
i="*"
n=0
for n in range (0,6):
print lista[n]*i
n=n+1
Biztos van szebb megoldás, de én nagyon boldog vagyok :)))
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
values = [0, 2, 4, 8, 4, 2, 1] -> list értékekkel
stars = [] -> üres lista létrehozása
for value in values: -> for ciklussal végigmész a lista elemein
stars.append('*' * value) -> a stars listához hozzáadod a szám szorozva * stringet, a szintaktikának olvass utána
line_of_stars = ' '.join(stars) -> így fűzöd össze egy darab stringgé a stars lista elemeit, amik szóközzel vannak elválasztva
print(line_of_stars) -> kinyomtatod
A kódodra reagálva kérdező pár elég fontos dolog és meg kéne ismerkedj előbb a clean code elvekkel:
1) változónak csak angol nevet adunk
2) értelmes nevet adunk, nem i meg n meg társai. A values listában value-kon iterálsz végig
3) semmi értelme az in range-n végigmenni, a lista elemein kell végigmenni
4) for ciklusban értelmetlen az n=n+1n mert ez a ciklus lényege, hogy automatikusan lépkedjen tovább
5) ha már valahol n-et növelni akarod, arra ez a szép megoldás n += 1, de for ciklusnál ezt felejtsd el
6) az első válaszadó tök jó megoldást írt, te full nem azt csináltad :D
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
#3: Jó, bár pár szőrszálhasogatás:
"1) változónak csak angol nevet adunk"
Gyakorol, nem multinacionális csoportban dolgozik, szóval per pillanat lényegtelen.
"2) értelmes nevet adunk, nem i meg n meg társai."
Ciklusváltozó nevének nyugodtan használhatna "i"-t (ott még el lehet tekinteni az értelmes nevektől), de egyébként tényleg jobbak a beszédes nevek.
"3) semmi értelme az in range-n végigmenni, a lista elemein kell végigmenni"
Ha már ragaszkodik az "in range"-hez, akkor lényegre törőbb:
for i in range(0,len(lista)):
de minden esetre egyszerűbb:
for ertek in lista:
és akkor az "ertek"-változót már közvetlenül használhatja a csillagok számához.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Nem rétek veled egyet, berögzül neki hibásan, hogy elnevezi minden hülyeségnek ahelyett, hogy adna változóknak/adatstruktúráknak értelmes, beszédes nevet.
Így is-úgyis el kell nevezni, akkor minek elsőre már valami "hülyeséget" adni?
A másik meg, a listának nem az indexei kellenek neki, hanem az elemeken kell végigmennie. Az meg for value in values
Lehet persze i-nek meghagyni a segédváltozót, csak mikor már egy nested listán menne végig pl vagy már a sokadig loopot írja, nagyon nem beszédes az 'i' sem. A values lista elemein megy végig, amik midnegyike egy value.
Köszi a kommenteket, mindegyikből tanultam! :)
Tudtok ajánlani Python leirást, amiből tanulhatok? Netről ollózva is erdekes, csak kimaradnak az alapok... :D
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!