Kezdőoldal » Számítástechnika » Programozás » Python program rengeteg "if"...

Python program rengeteg "if" nélkül?

Figyelt kérdés

Ez lenne a feladat :

Írjon egy programot, amiben több, különböző színű labda mozog, amik egymásról és az oldalfalakról

visszapattannak.


A kérdés az, hogy a labdák egymásról való visszapattanását hogy lehetne megfogalmazni ?

Muszáj rengeteg if használatával, vagy van rövidebb megoldás ?


2014. febr. 18. 15:34
1 2
 1/14 Tengor ***** válasza:

Mit értesz rengeteg IF alatt?

A labdákat egy listában tárolod és két for ciklussal végigmégy a listán és megnézed, hogy a labdák milyen távol vannak egymástól. Ha a távolság egyenlő v. kisebb mint a két vizsgált labda sugara, akkor számolsz egy ütközést az épp aktuális irányokból és kiszámolod az új irányvektorokat.

2014. febr. 18. 15:40
Hasznos számodra ez a válasz?
 2/14 A kérdező kommentje:

Gérard Swinnen könyve alapján haladok, és abban még nem volt szükség for ciklusra.


for-nélkül megoldható esetleg ?

Vagy ha összefoglalnád a működését, azt megköszönném.

2014. febr. 18. 15:58
 3/14 Tengor ***** válasza:

Ha tudod, hogy hány tested van, akkor igen. Ha nem tudod, akkor nem tudod for nélkül megoldani.

Érdekesnek találom, hogy ilyen szintű feladatot kell megcsinálni és a ciklusokról még nem volt szó.

2014. febr. 18. 17:34
Hasznos számodra ez a válasz?
 4/14 anonim ***** válasza:
Van másfajta ciklus is, nem csak for (pl. do-while), bár gyanítom azt se tudod mi, ha a for ciklust nem ismered.
2014. febr. 18. 22:42
Hasznos számodra ez a válasz?
 5/14 anonim ***** válasza:
Akkor milyen témák voltak abban a könyvben?
2014. febr. 18. 22:57
Hasznos számodra ez a válasz?
 6/14 Tengor ***** válasza:

Azért a for-t javasoltam, mert tömbökön tipikusan ezzel a számlás ciklussal szoktunk végigmenni.

Mindhárom ciklussal (for, while, do-while) ugyan azokat lehet megcsinálni, csak valamelyikkel bizonyos feladatok elegánsabbak, könnyebben olvashatóak.

2014. febr. 19. 08:50
Hasznos számodra ez a válasz?
 7/14 A kérdező kommentje:

A while-ciklus-t már ismerem, a for-t még nem.

Tudom, hogy hány test van (3). Írna valaki egy ciklust, ami legalább eligazít ?

2014. febr. 19. 15:17
 8/14 anonim ***** válasza:

For ciklus kell hozzá, mégpedig egy speciális nested-loop.


A nested-loop azt jelenti, hogy a két ciklus egymásba van ágyazva. Példa:


for i in range(0, n):

  for j in range(0, n):

doStuff()


A példában szereplő 'doStuff()' összesem n^2-szer fog lefutni.


Ami neked kell azért speciális mert nem kell minden elemet vizsgálni, mivel ütközést vizsgálsz. Magyarán ha a 12. labdáról kiderül, hogy ütközött a 76. labdával, akkor nem kell megvizsgálni a 76.-12. párost. Sőt egy labda önmagával nem ütközhet. Mindezt figyelembe véve a vizsgálatok száma:

(n^2 - n) / 2


Kódban valahogy így festhet a dolog:


for i in range(0, n):

for j in range(0, n):

collosionData = detectCollosion(labdak, i, j)

labdak[i].collide(collosionData)

labdak[j].collide(collosionData)


Feltételezve, hogy létezik olyan 'detectCollosion()' függvény, ami ütközést vizsgál egy 'labdak' tömb , i és j eleme között, majd visszatér az eredménnyel. Az eredmény lehet komplexebb is (logikai eredmény, normális tangenciális komponens, erő, csillapítás, stb...). Valamint a 'labdak' elemei olyan osztályok, ahol létezik a 'collide()' metódus, ami a 'detectCollosion()' eredményét felhasználva megvalósítja a labda pályagörbéjének módosítását.

2014. febr. 19. 15:42
Hasznos számodra ez a válasz?
 9/14 anonim ***** válasza:

Ki kell javítanom magamat, a második programrész hibádzik. A második range, csak i-ig megy, ez adja a labdak páros elemek mátrixának a háromszög alakot.


for i in range(0, n):

  for j in range(0, i):

    collosionData = detectCollosion(labdak, i, j)

    labdak[i].collide(collosionData)

    labdak[j].collide(collosionData)

2014. febr. 19. 15:45
Hasznos számodra ez a válasz?
 10/14 anonim ***** válasza:

A "kell" az erős túlzás.

Alapvetés, hogy ami for ciklussal megvalósítható, az while ciklussal is.

A for ciklustól kényelmesebb és átláthatóbb lesz a kód, de egyáltalán nem nélkülözhetetlen.

2014. febr. 19. 15:58
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!