Ezt hogy oldhatnám meg Pythonban?
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. :)
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
Az előző programomból egy kissé kitakarítottam a fölösleges zárójeleket:
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...
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]
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)
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)
@#18:
Egyszerű mágia, semmi egyéb...
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!