On 10/12/23 15:42, Steve GS via Python-list wrote:
  If I enter a one-digit input or a three-digit number, the code works but if I 
enter a two digit number, the if statement fails and the else condition 
prevails.

        tsReading = input("   Enter the " + Brand + " test strip reading: ")
         if tsReading == "": tsReading = "0"
         print(tsReading)
         if ((tsReading < "400") and (tsReading >= "0")):
             tsDose = GetDose(sReading)
             print(tsReading + "-" + tsDose)
             ValueFailed = False
         else:
             print("Enter valid sensor test strip Reading.")

I converted the variable to int along with the if statement comparison and it 
works as expected.
See if it fails for you...

It works as expected (by Python)! This is how strings are compared - which is not the same as the apparently-equivalent numeric comparison.

Think about what you expect from the code below, and then take it for a spin (of mental agility):

values = [ 333, 33, 3, 222, 22, 2, 111, 11, 1, ]
print( sorted( values ) )
strings = [ "333", "33", "3", "222", "22", "2", "111", "11", "1", ]
print( sorted( strings ) )


The application's data appears numeric (GetDose() decides!). Accordingly, treat it so by wrapping int() or float() within a try-except (and adjusting thereafter...).


"But wait, there's more!"
(assuming implement as-above):

if 0 <= ts_reading < 400:

1 consistent 'direction' of the comparisons = readability
2 able to "chain" the comparisons = convenience
3 identifier is PEP-008-compliant = quality and style

--
Regards,
=dn
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to