def kysy_liukuluku(kysymys, alaraja, ylaraja): """Kysyy käyttäjä liukuluvun tai kokonaisluvun ja tarkistaa syötteen oikean tietotyypin ja suuruuden Args: kysymys (str): Käyttäjälle esitettävä kysymys alaraja (float): pienin sallittu arvo ylaraja (float): suurin sallittu arvo Returns: float: käyttäjän syöttämä arvo liukulukuna """ # Kysytään käyttäjältä tietoa, kunnes saadaan järkevä arvo luku = 0 tapahtui_virhe = True while tapahtui_virhe == True: # Esitetään parametrina annettu kysymys ja tallennetaan vastaus (merkkijono) muuttujaan vastaus_str = input(kysymys + ' ') # Tarkistetaan syötteen järkevyys, virhetiedot ja arvo tallennetaan listamuuttujaan tulokset tulokset = sanity2.liukuluvuksi(vastaus_str) # Katsotaan onko virhekoodi 0, ja tallennetaan arvo muuttujaan vastaus if tulokset[0] == 0: vastaus = tulokset[2] # Tehdään raja-arvotarkistus, virhetiedot muuttujaan tarkistusviesti tarkistusviesti = sanity2.rajatarkistus(vastaus, alaraja, ylaraja) # Katsotaan onko arvo sallittujen rajojen sisällä tutkimalla virhekoodia if tarkistusviesti[0] == 0: tapahtui_virhe = False luku = vastaus else: # Jos raja-arvotarkistuksen virhekoodi ei ole 0, tulostetaan virheilmoitus print(tarkistusviesti[1]) # Jos liukulukutarkistuksen virhekoodi ei ole 0, tulostetaan virheilmoitus else: print(tulokset[1]) return luku
def kysy_liukuluku(kysymys, alaraja, ylaraja): """Kysyy käyttäjältä liukuluvun tai kokonaisluvun ja tarkistaa syötteen oikean tietotyypin ja suuruuden Args: kysymys (string): Käyttäjälle esitettävä kysymys alaraja (float): Pienin sallittu arvo ylaraja (float): Suurin sallittu arvo Returns: float: Käyttäjän syöttämä arvo liukulukuna """ # Kysytään käyttäjältä tietoa kunnes saadaan järkevä arvo luku = 0 tapahtui_virhe = True while tapahtui_virhe == True: vastaus_str = input(kysymys) tulokset = sanity2.liukuluvuksi(vastaus_str) # Katsotaan onko virhekoodi 0, ja tallennetaan arvo muuttujaan paino if tulokset[0] == 0: vastaus = tulokset[2] tarkistettu_vastaus = sanity2.rajatarkistus( vastaus, alaraja, ylaraja) # Katsotaan onko arvo sallittujen rajojen sisällä tutkimalla virhekoodia if tarkistettu_vastaus[0] == 0: tapahtui_virhe = False luku = vastaus else: # Tulostetaan virheilmoitus print(tarkistettu_vastaus[1]) # Jos virhekoodi ei ole 0, tulostetaan virheilmoitus else: print(tulokset[1]) return luku
def test_liukuluvuksi_teksti(): assert sanity2.liukuluvuksi('sataviisi') == [ 2, 'Syötteessä ylimäärisiä merkkejä: vain numerot ja desimaalipiste on sallittu', 0 ]
def test_liukuluvuksi_teksti_lopussa(): assert sanity2.liukuluvuksi('125.5 kg') == [ 4, 'Desimaalierottimen jälkeen ylimääräisiä merkkejä: vain numerot ja desimaalipiste on sallittu', 0 ]
def test_liukuluvuksi_teksti_ennen(): assert sanity2.liukuluvuksi('paino 125.5') == [ 3, 'Ennen desimaalierotinta ylimääräisiä merkkejä: vain numerot ja desimaalipiste on sallittu', 0 ]
def test_liukuluvuksi_monta_pistetta(): assert sanity2.liukuluvuksi('12.5.5') == [ 1, 'Syöte sisältää useita erottimia. Vain yksi arvo on sallittu', 0 ]
def test_liukuluvuksi_pilkku(): assert sanity2.liukuluvuksi('125,5') == [0, 'Syöte OK', 125.5]
def test_liukuluvuksi_ok(): assert sanity2.liukuluvuksi('125.5') == [0, 'Syöte OK', 125.5]
def test_liukuluku_kirjaimia_alussa(): assert sanity2.liukuluvuksi('paino 15.0') == [ 3, 'Ennen desimaalierotinta ylimääräisiä merkkejä: vain numerot ja desimaalipiste on sallittu', 0 ]
def test_liukuluku_monta_pilkkua(): assert sanity2.liukuluvuksi('15,0,7') == [ 1, 'Syöte sisältää useita erottimia. Vain yksi arvo on sallittu', 0 ]
def test_liukuluku_liukuluku_pilkku(): assert sanity2.liukuluvuksi('15,0') == [0, 'Syöte OK', 15.0]
def test_liukuluku_kokoaisluku(): assert sanity2.liukuluvuksi('15') == [0, 'Syöte OK', 15.0]
def test_liukuluku_liukuluku(): assert sanity2.liukuluvuksi('15.0.7') == [1, 'Syöte sisältää useita erottimia. Vain yksi arvo on sallittu', 0]