Advertisement
Acer1968

Upravený input jen pro čísla typu int a float

Oct 29th, 2020 (edited)
345
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.24 KB | None | 0 0
  1. def numinput(myprompt,int_value=True,can_be_negative=True,show_messages=True):
  2.     '''
  3.    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.
  4.  
  5.    Vstup:
  6.        myprompt:      
  7.                    Prompt, který se zobrazí před požadavkem na zadání čísla.
  8.                    Prompt se doplňuje podle následujících hodnot o požadavky na zadávanou hodnotu:
  9.                        "Integer required" nebo "Float possible"
  10.                        "NON negative required" nebo "Negative possible"
  11.  
  12.        int_value:
  13.                    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í.
  14.  
  15.                    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
  16.        can_be_negative:
  17.                    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.
  18.        show_messages:
  19.                    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.
  20.    '''
  21.     # převod názvů tříd do člověkem čitelné podoby
  22.     type_val_human = {"int":"INTEGER","float":"FLOAT"}
  23.     # smyčka až do zadání platné hodnoty dle požadavků
  24.     while True:
  25.         outprompt = ""
  26.         if show_messages:
  27.             outprompt = "(Integer required) " if int_value else "(Float possible) "
  28.             outprompt = "(Negative possible)"+outprompt if can_be_negative else "(NON negative required)"+outprompt
  29.        
  30.         outprompt += myprompt
  31.         num = input(outprompt)
  32.         if int_value:
  33.             try:
  34.                 val = int(num)
  35.                 if not can_be_negative and val<0:
  36.                     raise ValueError("NON negative number is required. Try again.")
  37.                 if show_messages:
  38.                     print("Input is an {} number.\nInput number is: ".format(type_val_human[val.__class__.__name__]), val)
  39.                 break;
  40.             except ValueError as vle:
  41.                 print("Error: ",str(vle.args[0]))
  42.         else:
  43.             try:
  44.                 val = float(num)
  45.                
  46.                 if val == int(val):
  47.                     val = int(val)
  48.                 if not can_be_negative and val<0:
  49.                     raise ValueError("NON negative number is required. Try again.")
  50.                 if show_messages:
  51.                     print("Input is an {} number.\nInput number is: ".format(type_val_human[val.__class__.__name__]), val)
  52.                 break;
  53.             except ValueError as vle:
  54.                 print("Error: ",str(vle.args[0]))
  55.     return val
  56.  
  57. mojecislo = numinput("Number: ", int_value=True, can_be_negative=False, show_messages=True)
  58. print("Moje číslo: ", mojecislo)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement