Python Forum
Single digits seem to be greater than double digits
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Single digits seem to be greater than double digits
#1
Hello, I am new to Python and I've been playing around with the 'Hello World' script that everyone probably starts with

I wanted to see if i could you 'if' properly so I made 2 'if' lines that would print a different response depending on 'age=input()'

I created a simple equation to write if the age=input() was <'18'. It simple finds the different between 'age=input()' and '18' to print how long is left until 18.

The trouble is, if 'age=input()' is a single digit int such as 4 or 9, the script will print the line for 'age>='18'. Almost like a single digit int is greater than '18'

Here is the code:

print('hello world!')
print('What is your name?')
name=input()
print('That is a nice name, '+name)
print('How old are you, '+name+' p.s. put a zero infront of a single digit')
age=input()
if age>='18':
print("if you're "+age+", that means it's beer o'clock!")
diff=str(18-(int(age)))
if age<'18':
print('That means you have to wait '+diff+' years to have a drink on me!')

Here is the output if age is a single digit int:

hello world!
What is your name?
G
That is a nice name, G
How old are you, G p.s. put a zero infront of a single digit
2
if you're 2, that means it's beer o'clock!

Whereas is you put a '0' infront of the single digit int, it works:

hello world!
What is your name?
G
That is a nice name, G
How old are you, G p.s. put a zero infront of a single digit
02
That means you have to wait 16 years to have a drink on me!

Any help is appreciated!
Reply
#2
See below, i used to typecast to str only at print, rest comparisons in int.

print('hello world!')
print('What is your name?')
name=input()
print('That is a nice name, '+name)
print('How old are you, '+name+' p.s. put a zero infront of a single digit')
age=int(input())
diff=18-age

if age>=18:
    print("if you're "+str(age)+", that means it's beer o'clock!")
if age<18:
    print('That means you have to wait '+str(diff)+' years to have a drink on me!')
Output:
C:\Users\sandeep\Downloads>py hh hello world! What is your name? user1 That is a nice name, user1 How old are you, user1 p.s. put a zero infront of a single digit 2 That means you have to wait 16 years to have a drink on me! C:\Users\sandeep\Downloads>py hh hello world! What is your name? user2 That is a nice name, user2 How old are you, user2 p.s. put a zero infront of a single digit 0 That means you have to wait 18 years to have a drink on me! C:\Users\sandeep\Downloads>py hh hello world! What is your name? user3 That is a nice name, user3 How old are you, user3 p.s. put a zero infront of a single digit 25 if you're 25, that means it's beer o'clock!
Best Regards,
Sandeep.

GANGA SANDEEP KUMAR
Reply
#3
Ahh legend thank you!

I tried playing around with str(int(age)) stuff like that but obviously didnt work.

Thanks for the help
Reply
#4
Comparing strings doesn't work like comparing numbers.

String comparison is based on character code points and can be desribed as follows:

- comparing the n-th characters of each string (starting with 0-th index) using the == operator
- if they’re equal, repeat this step with the next character
- in case of two unequal characters, string with the character that has the lower code point is 'less' than other
- if all characters are equal, the strings are equal
- if one string is shorter i.e. runs out of characters during comparison (one string is a “prefix” of the other), the shorter string is “less than” the longer one

Codepoints for characters 0..9 are:

>>> [ord(str(i)) for i in range(10)]
[48, 49, 50, 51, 52, 53, 54, 55, 56, 57]
Therefore:

>>> '18' < '2'   # code point of '1' is smaller than of '2'
True
>>> '18' < '02'          # codepoint of '1' is larger than of '0'
False
I'm not 'in'-sane. Indeed, I am so far 'out' of sane that you appear a tiny blip on the distant coast of sanity. Bucky Katt, Get Fuzzy

Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.
Reply
#5
Please use the
[python][/python]
tags to wrap your code. Otherwise the indentation is lost and syntax highlighting does not work.

print("hello world!")
print("What is your name?")
name = input()

print("That is a nice name, " + name)
print("How old are you, " + name + " p.s. put a zero infront of a single digit")
age = input()

if age >= "18":
    print("if you're " + age + ", that means it's beer o'clock!")
diff = str(18 - (int(age)))
if age < "18":
    print("That means you have to wait " + diff + " years to have a drink on me!")
In Line 9 you're comparing two strings.
The comparison of str is made via lexicographical order.

Here are some hexadecimal values:
Whitespace == 0x20
0 - 9 == 0x30 - 0x39
A - Z == 0x41 - 0x5a
a - z == 0x61 - 0x7a

If you compare this:
"1" > "18"

The interpreter compares char by char.
(0x31,) > (0x31, 0x38)
But if you compare "4" > "18", you have this values:
(0x34,) > (0x31, 0x38)
So, the first one is bigger and this explains why "4" > "18" == True.

If you want to compare numbers, then convert the str into int.



print("hello world!")
print("What is your name?")
name = input()

print("That is a nice name, " + name)
print("How old are you, " + name + " p.s. put a zero infront of a single digit")
age = int(input())

if age >= 18:
    print("if you're " + str(age) + ", that means it's beer o'clock!")
diff = 18 - age
if age < 18:
    print("That means you have to wait " + str(diff) + " years to have a drink on me!")
The concatenation of str should not be done with + operator. If you work with int, float or other types, you've to convert them back to a str. Instead, use string formatting. With modern Python, we have f-strings. A f in front of the " introduces a format-string. The names in the curly braces are replaced with their values. For example, {age} is replaced with the age, which is an int.

print("hello world!")
print("What is your name?")
name = input()

print(f"That is a nice name {name}")
print(f"How old are you {name}")
age = int(input())

if age >= 18:
    print(f"if you're {age} that means it's beer o'clock!")
diff = 18 - age
if age < 18:
    print(f"That means you have to wait {diff} years to have a drink on me!")
The benefit is, that you don't have to convert the int explicit back to a str if you're using string formatting.
Almost dead, but too lazy to die: https://sourceserver.info
All humans together. We don't need politicians!
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  If a set element has digits in the element tester_V 3 275 Mar-25-2024, 04:43 PM
Last Post: deanhystad
  method to remove zero digits from fraction in decimal Skaperen 17 2,693 Oct-23-2022, 04:02 AM
Last Post: Skaperen
  First line with digits before last line tester_V 5 1,439 Aug-22-2022, 09:04 PM
Last Post: tester_V
  Finding First Digits in String giddyhead 4 1,348 Aug-17-2022, 08:12 PM
Last Post: giddyhead
  Adding Decimals to classes with OOP + rounding to significant digits (ATM demo) Drone4four 7 2,290 May-04-2022, 06:15 AM
Last Post: Drone4four
  checking for valid hexadecimal digits Skaperen 3 6,364 Sep-02-2021, 07:22 AM
Last Post: buran
Photo How can I use 2 digits format for all the number? plumberpy 6 2,331 Aug-09-2021, 02:16 PM
Last Post: plumberpy
  Remove single and double quotes from a csv file in 3 to 4 column shantanu97 0 6,969 Mar-31-2021, 10:52 AM
Last Post: shantanu97
  Digits of a number 1234 2 1,834 Nov-27-2020, 05:43 PM
Last Post: perfringo
  Printing digits after the decimal point one by one uberman321 1 1,730 Oct-20-2020, 08:10 AM
Last Post: bowlofred

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020