Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
whats wrong with this code?
#1
It seems if I try to type anything other than "Italy" or "italy", it still prints out ("I love that place, same here"), which supposed to print "not bad" considering the string that was plugged into the input wasn't Italy.

favoritePlace = input("how about your favorite place?")

if favoritePlace is "italy" or "Italy":
    print("I love that place, same here")
else:
    print("not bad")
Reply
#2
The python is operator matches the instance and not value.
To match value == is used.
if favoritePlace =="italy" or favoritePlace == "Italy":
Reply
#3
(Aug-31-2017, 01:06 AM)hbknjr Wrote: The python is operator matches the instance and not value.
To match value == is used.
if favoritePlace =="italy" or favoritePlace == "Italy":

I thought "==" is used only for numbers and "is" for strings. When do you use "is"

edit: I also tried "==" and it still never worked..whats the issue?
Reply
#4
You rarely use is. The is operator checks to see if both objects are stored in the same place (basically). It checks not just for a string 'italy', but a particular instance of the string 'italy'.

== checks to see if two things are equal (they have the same value). It doesn't care where they're stored.

As for == not working, did you notice the other problem with the or operator? Read this tutorial about the problem.
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply
#5
(Aug-31-2017, 02:42 AM)ichabod801 Wrote: You rarely use is. The is operator checks to see if both objects are stored in the same place (basically). It checks not just for a string 'italy', but a particular instance of the string 'italy'.

== checks to see if two things are equal (they have the same value). It doesn't care where they're stored.

As for == not working, did you notice the other problem with the or operator? Read this tutorial about the problem.

I was completely wrong between "is" and "==" I spotted the difference and it had nothinggg to do between strings and numbers. I realized the code worked after I deleted the "or" off my statement. I read the tutorial, however, I never really understood it? I see I did the exact same mistake as his example of how to not use it. I was trying to put "or" to tell the computer to let it pass as true if they either put Italy or italy since there was no difference. I don't know what I have to do to let the computer know thats what I meant. The tutorial probably explained it, however, it tripped me out and it confused me.
Reply
#6
I think the tutorial is trying to explain that:

1. or keyword expects a boolean expression after it.

2. if a string is placed after or, like what you have placed:
if favoritePlace is "italy" or "Italy":
is always be evaluated as True
Anything or ed with True will get True as result

3. So instead if writing the conditional statement like above
You have to write like this:

if favoritePlace =="italy" or favoritePlace == "Italy":
Reply
#7
Other solutions are by formatting the input and using lists. In the first example, we change the users response to all lower case (a common practice), so italy, Italy, iTaLy, etc would all evaluate to True. There are other options available, such as changing the input to all capital letters, but again, probably the most common is lower case.

The second way, with lists, checks if the users input exists in the list, if it does, it evaluates to True other wise False. You could combine the two methods so rather than having a list of all variants, you only need the lower case version. Asking for a favorite place, however, would result in a rather long list 

# Changing any input to lowercase. Italy and italy both return True

favoritePlace = input("how about your favorite place (using 'lower')?").lower()

if favoritePlace == "italy":
    print("I love that place, same here")
else:
    print("not bad")

# Using a list
places = ['italy', 'Italy']
favoritePlace = input("how about your favorite place (using list)?").lower()

if favoritePlace in places:
    print("I love that place, same here")
else:
    print("not in list")

# Adding to your list
places = ['italy', 'Italy']
favoritePlace = input("how about your favorite place (combining and adding)?").lower()

if favoritePlace == "italy":
    print("I love that place, same here")
else:
    print("I will add that to my list")
    places.append(favoritePlace)
print("New list = ", places)
Output:
C:\Python36\python.exe C:/Python/Games/scratch.py how about your favorite place (using 'lower')?Italy I love that place, same here how about your favorite place (using list)?italy I love that place, same here how about your favorite place (combining and adding)?england I will add that to my list New list =  ['italy', 'Italy', 'england'] Process finished with exit code 0
If it ain't broke, I just haven't gotten to it yet.
OS: Windows 10, openSuse 42.3, freeBSD 11, Raspian "Stretch"
Python 3.6.5, IDE: PyCharm 2018 Community Edition
Reply
#8
(Aug-31-2017, 12:10 PM)sparkz_alot Wrote: Other solutions are by formatting the input and using lists. In the first example, we change the users response to all lower case (a common practice), so italy, Italy, iTaLy, etc would all evaluate to True. There are other options available, such as changing the input to all capital letters, but again, probably the most common is lower case.

The second way, with lists, checks if the users input exists in the list, if it does, it evaluates to True other wise False. You could combine the two methods so rather than having a list of all variants, you only need the lower case version. Asking for a favorite place, however, would result in a rather long list 

# Changing any input to lowercase. Italy and italy both return True

favoritePlace = input("how about your favorite place (using 'lower')?").lower()

if favoritePlace == "italy":
    print("I love that place, same here")
else:
    print("not bad")

# Using a list
places = ['italy', 'Italy']
favoritePlace = input("how about your favorite place (using list)?").lower()

if favoritePlace in places:
    print("I love that place, same here")
else:
    print("not in list")

# Adding to your list
places = ['italy', 'Italy']
favoritePlace = input("how about your favorite place (combining and adding)?").lower()

if favoritePlace == "italy":
    print("I love that place, same here")
else:
    print("I will add that to my list")
    places.append(favoritePlace)
print("New list = ", places)
Output:
C:\Python36\python.exe C:/Python/Games/scratch.py how about your favorite place (using 'lower')?Italy I love that place, same here how about your favorite place (using list)?italy I love that place, same here how about your favorite place (combining and adding)?england I will add that to my list New list =  ['italy', 'Italy', 'england'] Process finished with exit code 0

Wow, thats pretty sweet! Never looked at it like that. Thanks for much, opened my eyes about lists and adding .lower() to the end of my line. Thanks man!
Reply
#9
(Aug-31-2017, 12:10 PM)sparkz_alot Wrote: Other solutions are by formatting the input and using lists. In the first example, we change the users response to all lower case (a common practice), so italy, Italy, iTaLy, etc would all evaluate to True. There are other options available, such as changing the input to all capital letters, but again, probably the most common is lower case.

The second way, with lists, checks if the users input exists in the list, if it does, it evaluates to True other wise False. You could combine the two methods so rather than having a list of all variants, you only need the lower case version. Asking for a favorite place, however, would result in a rather long list 

# Changing any input to lowercase. Italy and italy both return True

favoritePlace = input("how about your favorite place (using 'lower')?").lower()

if favoritePlace == "italy":
    print("I love that place, same here")
else:
    print("not bad")

# Using a list
places = ['italy', 'Italy']
favoritePlace = input("how about your favorite place (using list)?").lower()

if favoritePlace in places:
    print("I love that place, same here")
else:
    print("not in list")

# Adding to your list
places = ['italy', 'Italy']
favoritePlace = input("how about your favorite place (combining and adding)?").lower()

if favoritePlace == "italy":
    print("I love that place, same here")
else:
    print("I will add that to my list")
    places.append(favoritePlace)
print("New list = ", places)
Output:
C:\Python36\python.exe C:/Python/Games/scratch.py how about your favorite place (using 'lower')?Italy I love that place, same here how about your favorite place (using list)?italy I love that place, same here how about your favorite place (combining and adding)?england I will add that to my list New list =  ['italy', 'Italy', 'england'] Process finished with exit code 0

@sparkz_alot that's a nice logic but I have a doubt over using a list (2nd one).

When you are converting the user input to lowercase, there is no point in storing "italy" and "Italy" in list before hand.
Reply
#10
I think He was showing an alternative for the comparison, and didn't
intend that both would be included in the final code
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  I have a code which is very simple but still I cannot detect what's wrong with it max22 1 480 Nov-07-2023, 04:32 PM
Last Post: snippsat
  Something wrong with my code FabianPruitt 5 849 Jul-03-2023, 10:55 PM
Last Post: Pedroski55
  Compiles Python code with no error but giving out no output - what's wrong with it? pythonflea 6 1,555 Mar-27-2023, 07:38 AM
Last Post: buran
  Video recording with Raspberry Pi - What´s wrong with my python code? Montezuma1502 3 1,249 Feb-24-2023, 06:14 PM
Last Post: deanhystad
  Why doesn't this code work? What is wrong with path? Melcu54 7 1,780 Jan-29-2023, 06:24 PM
Last Post: Melcu54
  Am I wrong or is Udemy wrong? String Slicing! Mavoz 3 2,535 Nov-05-2022, 11:33 AM
Last Post: Mavoz
  Wrong code in Python exercise MaartenRo 2 1,526 Jan-01-2022, 04:12 PM
Last Post: MaartenRo
  The code I have written removes the desired number of rows, but wrong rows Jdesi1983 0 1,629 Dec-08-2021, 04:42 AM
Last Post: Jdesi1983
  VS Code debugger using wrong Python environment topfox 0 2,497 Jun-09-2021, 10:01 AM
Last Post: topfox
  Whats wrong with the elif? inunanimous93 3 2,448 Nov-30-2020, 03:58 AM
Last Post: deanhystad

Forum Jump:

User Panel Messages

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