On 21/09/13 23:44, Arron Sutcliffe wrote:
Hi i have been working on a currency converter for school and i have
been having a hard time with this syntax error "Expected indented block"
and i don't understand why it isn't working.

It tells you, it's expecting an indented block...

v_fallback = 1
while v_fallback == 1:
     print("Please enter your current currency")
     v_current = input()
     if v_current == ("USD" or "usd" or "US Dollars" or "us dollars"):
         print("Please enter the name of the currency you wish to
convert to")
         print("Your options are GBP, EUR, INR, AUD, CAD, AED or BACK to
return to the Main Menu")
         v_final = input()
         if v_final ==("GBP" or "gpb"):

Python is expecting an indented block of code to do something when the if is true. So eoitrher you put some code here or...

         if v_final == ("EUR" or "eur"):

You indent this line. But thats probably a bad idea.

         if v_final == ("INR" or "inr"):
         if v_final == ("AUD" or "aud"):
         if v_final == ("CAD" or "cad"):

BTW these lines are almost certainly not doing what you think they are.
This is not testing whether v_final is one of the values in the if tet, it is testing whether v_final has the same truth(boolewan0 vale as the expression (str1 or str2) which is always True.

You probably want something like

if v_final.upper() == "GBP": # do something

or, more likely in this case:

if v_final.upper() in ("GBP", "INR", "AUD", ...other values): #do this

         if v_final == ("AED" or "aed"):
         if v_final == ("BACK" or "back"):
         else:
             print ("ERROR - Please enter a valid currency, if incorrect
currency is entered again program will close")
             print("Your options are GBP, EUR, INR, AUD, CAD, AED or
BACK to return to the main menu")
             v_final = input()
             if v_final == ("GBP" or "gbp"):
             if v_final == ("EUR" or "eur"):
             if v_final == ("INR" or "inr"):
             if v_final == ("AUD" or "aud"):
             if v_final ==("CAD" or "cad"):
             if v_final == ("AED" or "aed"):
             if v_final == ("BACK" or "back"):
         else print ("ERROR - Program will close"):
             v_fallback = 0


And there is a programming principle called DRY (Don't Repeat Yourself).
You have the same set of tests here as above. Rather than limit the user to 2 goes you could wrap the tests into a while loop and only have them once. That way there is never any risk of them getting out of step with each other. (You could also encapsulate them in a function but you might not have covered functions yet!)


HTH
--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.flickr.com/photos/alangauldphotos

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to