Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def numinput(myprompt,int_value=True,can_be_negative=True,show_messages=True):
- '''
- Upravený input. Tak dlouho vyžaduje zadání hodnoty, až je to konečně číslo, buď typu "int" nebo typu "float". Toto číslo vrací jako návratovou hodnotu.
- Vstup:
- myprompt:
- Prompt, který se zobrazí před požadavkem na zadání čísla.
- Prompt se doplňuje podle následujících hodnot o požadavky na zadávanou hodnotu:
- "Integer required" nebo "Float possible"
- "NON negative required" nebo "Negative possible"
- int_value:
- Pokud je vyžadováno vrácení hodnoty typu "int", potom nastav tento parametr na True (defaultní). Hodnoty typu "float", které mají jakoukoli číslici za desetinnou tečkou jsou vyhodnoceny jako chybné zadání.
- Pokud je možno vrátit i hodnoty typu "float", potom nastav parametr na False. V případě, že je zadáno číslo "float", které má ale za desetinnou tečkou NULOVOU hodnotu, je vráceno číslo typu "int", potom nastav parametr
- can_be_negative:
- Pokud vrácené číslo může být záporné, nastav parametr na True (defaultní). V případě, že jsou požadována jen kladná čísla nebo nula, nastav na False.
- show_messages:
- Pokud nevadí do konzole vypsat zprávu o hodnotě a typu návratové hodnoty, nastav True (defaultní). V případě False se budou zobrazovat v konzoli jen hlášky z výjimek.
- '''
- # převod názvů tříd do člověkem čitelné podoby
- type_val_human = {"int":"INTEGER","float":"FLOAT"}
- # smyčka až do zadání platné hodnoty dle požadavků
- while True:
- outprompt = ""
- if show_messages:
- outprompt = "(Integer required) " if int_value else "(Float possible) "
- outprompt = "(Negative possible)"+outprompt if can_be_negative else "(NON negative required)"+outprompt
- outprompt += myprompt
- num = input(outprompt)
- if int_value:
- try:
- val = int(num)
- if not can_be_negative and val<0:
- raise ValueError("NON negative number is required. Try again.")
- if show_messages:
- print("Input is an {} number.\nInput number is: ".format(type_val_human[val.__class__.__name__]), val)
- break;
- except ValueError as vle:
- print("Error: ",str(vle.args[0]))
- else:
- try:
- val = float(num)
- if val == int(val):
- val = int(val)
- if not can_be_negative and val<0:
- raise ValueError("NON negative number is required. Try again.")
- if show_messages:
- print("Input is an {} number.\nInput number is: ".format(type_val_human[val.__class__.__name__]), val)
- break;
- except ValueError as vle:
- print("Error: ",str(vle.args[0]))
- return val
- mojecislo = numinput("Number: ", int_value=True, can_be_negative=False, show_messages=True)
- print("Moje číslo: ", mojecislo)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement