Kezdőoldal » Számítástechnika » Programozás » Ezt hogy oldhatnám meg Pythonban?

Ezt hogy oldhatnám meg Pythonban?

Figyelt kérdés

Most kezdtem bele a nyelve és egy feladatot szeretnék megoldani.


A felhasználótól be szeretnék kérni egy számot, ez megvan:


shifttime = int(input('Add meg a műszakidőt! '))


A lényeg az lenne, hogy az input csak 8 vagy 12 lehessen.


Ha nem 8 vagy 12 a szám, akkor ismételni kéne bekérést, mindaddig míg nem ad meg egy helyes számot.


De még ezt is szeretném azzal fejleszteni, hogy ha nem számot, hanem mást(karakter, szimbólum, stb...) ír be, akkor ismét kérje be a program a műszakidőt.


Nem tudom hogy kéne ezt megcsinálni. Ha tudna segíteni valaki, akkor nagyon megköszönném. Esetleg ha magyarázatot is ad mellé valaki, hogy mit miért, akkor örök hálám. :)



2017. dec. 27. 01:19
1 2 3
 11/21 tabaki ***** válasza:
Egyébként -- javíts ki, ha nem jól mondom -- az OR-vizsgálat szerintem nem működhet. Hogy nálad mégis sikeresen lefutott, az annak köszönhető, hogy a tizenkettő nevű változód értéke is 8...
2017. dec. 27. 11:02
Hasznos számodra ez a válasz?
 12/21 A kérdező kommentje:

Igen, észrevettem. :'D


No de a 10. válaszolónak örök hálám, az első módszert használtam és jól működik! Köszönöm! :)


Ma is tanultam valami újat. :D

2017. dec. 27. 11:13
 13/21 tabaki ***** válasza:

Az előző programomból egy kissé kitakarítottam a fölösleges zárójeleket:

[link]


Nyugodtan használhatod a második módszert is, csak éppen, mint láthatod, a feltétel nem OR, hanem AND. A különbség:

„while shifttime != nyolc or shifttime != tizenketto:” a következőt jelenti:

Ismételd addig, amíg a shifttime értéke vagy nyolctól, vagy tizenkettőtől eltér. Hiába írod be az egyik helyesnek szánt értéket, azzal máris garantáltad, hogy a másikkal nem lesz azonos, tehát a ciklusnak tovább kell futnia -- kivéve a te fortélyos esetedet, amikor kijelented, hogy a tizenkettő meg a nyolc ugyanaz az érték.

„while shifttime != nyolc and shifttime != tizenketto:” értelme ezzel szemben:

Ismételd addig, míg shifttime a nyolctól is, meg a tizenkettőtől is eltér (vagyis sem nem nyolc, sem nem tizenkettő). Ha most beírod valamelyik helyes értéket, akkor ez a kettős feltétel már nem teljesül, tehát véget ér a ciklus.


Felhívnám a figyelmet a bemenet isdigit() metódusára (khm, remélem, tényleg metódus...). Ezzel ellenőrizheted, hogy tényleg számként értelmezhető stringet olvastál-e be, mert ha nem, akkor a számmá alakítási kísérlet hibát eredményez, lásd a #9 kommentedet. Ezért nem erisztettem rá a shifttime-ra közvetlenül az inputot a kérdésben szereplő módon. Nincs kizárva, hogy létezik ennél tömörebb, elegánsabb megoldás, de azt majd olyan közli, aki ismeri is a nyelvet...

2017. dec. 27. 12:10
Hasznos számodra ez a válasz?
 14/21 anonim ***** válasza:

Na szóval, ez lenne a szakszerű módja:


while True:

....try:

........muszakido = int(input("Adja meg a műszakidőt (8 vagy 12): "))

........if muszakido not in [8, 12]:

............raise ValueError;

........break

....except ValueError:

........print("A műszakidő csak 8 vagy 12 lehet!")

print("A magadott műszakidő: ", muszakido)


Lásd még: [link]

2017. dec. 28. 21:51
Hasznos számodra ez a válasz?
 15/21 anonim ***** válasza:

Bocs, a

......raise ValueError;

egyel bentebb van, szóval:

while True:

....try:

......muszakido = int(input("Adja meg a műszakidőt (8 vagy 12): "))

......if muszakido not in [8, 12]:

.........raise ValueError;

......break

....except ValueError:

......print("A műszakidő csak 8 vagy 12 lehet!")

print("A magadott műszakidő: ", muszakido)

2017. dec. 28. 22:04
Hasznos számodra ez a válasz?
 16/21 tabaki ***** válasza:

while True:

      try:

            muszakido = int(input("Adja meg a műszakidőt (8 vagy 12): "))

            if muszakido not in [8, 12]:

                  raise ValueError;

            break

      except ValueError:

            print("A műszakidő csak 8 vagy 12 lehet!")

print("A magadott műszakidő: ", muszakido)

2017. dec. 28. 22:41
Hasznos számodra ez a válasz?
 17/21 anonim ***** válasza:
Jaja, köszi! Úgy látszik a sok pontot.is lenyeli a gyk.
2017. dec. 28. 22:53
Hasznos számodra ez a válasz?
 18/21 anonim ***** válasza:
Tabaki, ezt a behúzást hogy csináltad?
2017. dec. 28. 23:46
Hasznos számodra ez a válasz?
 19/21 tabaki ***** válasza:
Igen, egyik karakternél sem fogadja el a túl sok ismétlést, ami üdvösen csökkenti az ASCII-artos mókázások számát, de itt, a Programozás rovatban csúnyán keresztbe tesz a jószándéknak is.
2017. dec. 28. 23:48
Hasznos számodra ez a válasz?
 20/21 tabaki ***** válasza:

@#18:

Egyszerű mágia, semmi egyéb...

2017. dec. 28. 23:51
Hasznos számodra ez a válasz?
1 2 3

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!