Kezdőoldal » Számítástechnika » Programozás » Ezt Python-ban while-lal...

Ezt Python-ban while-lal hogyan lehet megtalálni?

Figyelt kérdés

Számokat írunk be, és a második legnagyobb elemet keressük.


currentmaximum = -555555

while True:

number = int(input('Enter a number: '))

if number == 0:

break

if number > currentmaximum:

currentmaximum = number

print(currentmaximum)


----

Itt még az elsőt se hozza vissza. (És kötelező a while loop)

Azért van a nullánál a break, mert a nullával zárjuk le a számbeírást. Pl 4 5 6 7 0


Ezt az errort írja ki:

ValueError: invalid literal for int() with base 10: '4 5 6 0'



2021. máj. 10. 11:34
 1/9 anonim ***** válasza:
77%

Rossz az elképzelésed.

A "4 5 6 7 0" karakterlánc nem alakítható át egyben egészek sorozatává pusztán int()

[link]

segítségével (mivel ott vannak benne a szóközök), előbb szét kell bontani szóközök mentén split()

[link]

segítségével, majd a kapott listán végig kell iterálni (ez történhet while segítségével), az aktuális elemet átkonvertálod az int() segítségével egésszé, majd meg lehet keresni egyszer a legnagyobb számot, majd egy újabb ciklusban másodszor a legnagyobb számot (persze lehet elegánsabban is, de gyanítom ez iskolai feladat, ahol a maximumkeresés kivitelezését honorálják)

2021. máj. 10. 12:11
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:

number = 1

utolso = 0

legnagyobb = 0

while number > 0:

number = int(input("Enter the number: "))

if number > legnagyobb:

legnagyobb = number

print (legnagyobb)


----

Közben megírtam ezt. S valóban elfelejtettem, hogy enterrel válasszam el az inputnál a bevitelt. Így legalább a legnagyobb szám megvan. De vajon a második legnagyobbat hogyan mentsem bele a ciklusba? Vagy ilyenkor ha alárakok egy másik while-ciklust, akkor nem fogja újra bekérni az összes számot?

2021. máj. 10. 12:18
 3/9 anonim ***** válasza:
0%

Két ciklus kell:

* az első ciklusban egyenként bekéred a számokat, átalakítod egyesével egésszé, majd egyrészt ellenörzöd, hogy az aktuális szám nagyobb-e, mint a legnagyobb, másrészt hozzáadod egyenként őket egy listához (erre szolgál az append() metódus: [link] )

* a második ciklusban végigiterálsz a listán és ellenőrzöd, hogy az aktuális szám nagyobb-e mint a "második legnagyobb" (ennek létrehozol egy változót a ciklus előtt), de kisebb-e, mint az előzőleg megkeresett legnagyobb

2021. máj. 10. 12:36
Hasznos számodra ez a válasz?
 4/9 A kérdező kommentje:

number = 1

utolso = 0

legnagyobb = 0

legnagyobblista = []

while number > 0:

number = int(input("Enter the number: "))

if number > legnagyobb:

legnagyobb = number

legnagyobblista.append(number)

legnagyobblista.sort()

megoldas = legnagyobblista[-2]

print (megoldas)



----

Most így a sorrendbe rakott lista hátulról második tagját visszahoztam. Viszont amikor pl csak [1, 2, 0] van a listán, akkor hibára vezet.

Ezek szerint akkor az indexelés helyett egy második while ciklus lehet a megoldás második körben?

2021. máj. 10. 12:39
 5/9 anonim ***** válasza:
84%

Ha a listát a sort() metódussal rendezed sorba, akkor felesleges megkeresni a legnagyobbat - szimplán a lista végéről kell a második elemet venni, ügyelve a lista hosszára (lásd len() metódus: [link] ) - ugyanis ha az kisebb mint kettő, akkor nincs második legnagyobb elem.


Viszont ajánlott ügyelni az alábbiakra:

* ha a feladat egy sorban kéreti be a számokat, nem külön-külön, akkor a #1-es hozzászólásomban említett egyszeri adatbekérés, annak split() metódussal való szétbontása, majd az utólagos egésszé konvertálás a javallott

* kérdéses az, hogy a feladatban megengedett-e a sort() metódus használata, vagy arra kíváncsiak, hogy képes vagy-e egy listán végigiterálve maximumot keresni - utóbbi esetben két ciklus kell: az egyikben bekéred a számokat, átalakítás után berakod a listába, majd ellenőrzöd, hogy az-e a legnagyobb; a másodikban - a listát és a legnagyobb számot felhasználva - pedig megkeresed a második legnagyobbat

2021. máj. 10. 13:15
Hasznos számodra ez a válasz?
 6/9 anonim ***** válasza:
21%

"Két ciklus kell:"


Nem kell két ciklus.

2021. máj. 10. 14:21
Hasznos számodra ez a válasz?
 7/9 anonim ***** válasza:

Tárolni kell a legnagyobb és a második legnagyobb számot. Ha a beolvasott érték nagyobb, mint a legnagyobb, az lesz az új legnagyobb, az előző lecsúszik másodiknak. Ha a kettő közé esik, akkor csak a másodikat cseréljük le erre. (Figyelni kell a kezdeti értékekre, praktikusan két negatív szám.)

Nem kell két ciklus, akár minden bolvasás után kiírható a két legnagyobb, ciklus vagy lista nélkül. (A negatív init értékeket persze kezelni kell kiiratáskor.)

2021. máj. 10. 15:38
Hasznos számodra ez a válasz?
 8/9 anonim ***** válasza:
29%

var

 a : integer = 1;

 b, c: integer;


begin

 while (a > 0) do

   begin

   read(a);

   if (a > c) then begin b:= c; c:= a end else

   if (a > b) then b:= a;

   end;

    writeln('The 2nd biggest: ',b);

end.

2021. máj. 10. 20:44
Hasznos számodra ez a válasz?
 9/9 A kérdező kommentje:

*közben megoldottam magamtól*

*köszönöm azért az észrevételeket*

2021. máj. 10. 20:47

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!