query in Conditional Statements in Python - python

I am newbie to Python and programming environment .Now I am studying python via online .I Landed up a small trouble while studying If Statements . The IF statement is currently interpreting while the ELSE statement is written it displays me a syntax error attached Screen Shot will make my problem understandble more clearly:
not only ELSE statement even ELIF statement also displays a syntax error.

the if and else need to be indented the same amount
for example
x = 5
if 8 > x:
print "8 is greater than x"
else:
same goes for elif
x = 5
if 8 > x:
print "8 is greater than x"
elif 8 < x:
print "8 is less than x"
else:

Indentation is everything in python. By
if x%2==0:
print "even"
else:
^^^
You mean to say that the else statement also comes under the if block, as it is one block of indent after the if statement. This throws an error as there is no if for the else that you have given. Now lets come to the correct way:
if x%2==0:
print "even"
else:
print "odd"
Here, since if and else are in the same indent, the else is corresponding to the if, and the else is executed if the if condition fails.

Check your spacing, else should be under if
if (x%2 == 0):
print "x is even"
else:
print "x is odd"

Related

simple python program doesnt run. shows intendent error

I'm trying to fix a problem like if a number is odd or even. this is a simple program to find if a number is odd or even
x=input("enter x")
if x%2==0:
print "even"
else
print "odd"
shows indented error in line 3.
plz help
okay, first of all -
you haven't formatted your code properly. Use the shortcut ctrl+K to do so when you're posting a question. I assume this is what you're looking for:
x = input("Enter X")
if x % 2 == 0:
print "Even"
else:
print "Odd"

error handling issue in python

I want to print out ERROR if the variable sizeOfList is less than 0, not an integer, or greater than 1000. This is how I am handling these errors:
if sizeOfList > 1000 or not isinstance(sizeOfList,int) or sizeOfList < 0:
print "ERROR:"
sys.exit()
It works perfectly fine except for when the variable is equal to zero. It thinks this is an error when I really just want it to print out nothing. I am really confused on why this is happening and how to fix it. Any help would be greatly appreciated!
Im not exactly sure what you are trying to accomplish but this is one way.
>>> def test_list(input):
... tmp = input
... while True:
... if len(input)<=0:
... print "out of range"
... break
... else:
... print tmp.pop()
...
>>> l = [1,2,3,4,5,5,6]
>>> test_list(l)
6
5
5
4
3
2
1
out of range
But when it is zero "ERROR:" is printed and the program exits...why is this?
The only way this is possible with the following conditional:
sizeOfList > 1000 or not isinstance(sizeOfList,int) or sizeOfList < 0
Is if your "zero" value is actually a string. Try
type(sizeOfList)
before your code to verify this.
Edit:
Generally you don't want to care about the variable types. Try writing like so:
if !sizeOfList.isdigit():
print "Not a number!"
sys.exit()
if sizeOfList < 0 or sizeOfList > 1000:
print "Not in range!"
sys.exit()

What do I need to fix to make this code return "True"?

Here's some code for a project I am working on:
# Make sure that the_flying_circus() returns True
def the_flying_circus():
if (3 < 4) and (-10 > -20):# Start coding here!
print "Hey now!"# Don't forget to indent
# the code inside this block!
elif (-4 != -4):
print "Egad!"# Keep going here.
else:
return True # You'll want to add the else statement, too!
I am not sure why this doesn't satisfy the condition of having the code return True. Any thoughts?
(3 < 4) and (-10 > -20)
Well, 3 is less than 4. And -10 is greater than -20. So that expression is always true. Your function does not execute a return statement and so returns None. Your function could be re-written like this:
def the_flying_circus():
print "Hey now!"
return None
This condition is always TRUE:
if (3 < 4) and (-10 > -20):# Start coding here!
print "Hey now!"# Don't forget to indent
# the code inside this block!
So the script will always print: Hey now!.
There is no chance, the code will ends in any of these conditions.
elif (-4 != -4):
print "Egad!"# Keep going here.
else:
return True # You'll want to add the else statement, too!
These conditions are absolutely unnecessary. Only thing you can do is change the first condition (e.g. use some variable, which will take different values so the condition won't be TRUE every time)
# Make sure that the_flying_circus() returns True def the_flying_circus():
if (3 < 4) and (-10 > -20):# Start coding here!
print "Hey now!"# Don't forget to indent
# the code inside this block!
elif (-4 != -4):
print "Egad!"# Keep going here.
return True # You'll want to add the else statement, too!
This returns True. Otherwise, you're always going to get "Hey now!" because your if condition is always True.
If you want to return True when the condition is met, then the code should be
if (3 < 4) and (-10 > -20):# Start coding here!
print "Hey now!"
return True

If and elif in Python for good programming practices

Hello there I'm currently trying to get a good grasp of the if, elif, else structure in Python. I'm trying some weird combinations in python having a test program to know the output in this if, if, elif, elif, else code. However I'm getting weird results such as this
input = raw_input('Please enter the required digit: ')
intput = int(input)
if intput == 0:
print 'if1'
if intput == 1:
print 'if2'
elif intput == 0:
print 'elif1'
elif intput == 1:
print 'elif2'
else:
print 'else'
if I in put 1 it will print "if2", I thought that it will also print "elif2" and other shenanigans when I try to change the "intput == n" code. So my question is do I have to stick to the if,elif, elif, .... n * elifs, else method which seems to me working alright than working with the wacky if,if.... n * ifs, elif, elif, ...n* elifs, else.
Thanks
The elif tree is designed such that at anywhere along if one of the statement turns out to be True, the rest of the elifs will not be evaluated.
Here's a tutorial that might help you understand if else better.
this may be more clear to understand:
if input == 0:
print "if1"
switch(input):
case 1:
print "if2"
break
case 0:
print "elif1"
break
case 1:
print "elif2"
break
default:
print "else"
break
of course, the code does not work.

Else clause on Python while statement

I've noticed the following code is legal in Python. My question is why? Is there a specific reason?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
Many beginners accidentally stumble on this syntax when they try to put an if/else block inside of a while or for loop, and don't indent the else properly. The solution is to make sure the else block lines up with the if, assuming that it was your intent to pair them. This question explains why it didn't cause a syntax error, and what the resulting code means. See also I'm getting an IndentationError. How do I fix it?, for the cases where there is a syntax error reported.
The else clause is only executed when your while condition becomes false. If you break out of the loop, or if an exception is raised, it won't be executed.
One way to think about it is as an if/else construct with respect to the condition:
if condition:
handle_true()
else:
handle_false()
is analogous to the looping construct:
while condition:
handle_true()
else:
# condition is false now, handle and go on with the rest of the program
handle_false()
An example might be along the lines of:
while value < threshold:
if not process_acceptable_value(value):
# something went wrong, exit the loop; don't pass go, don't collect 200
break
value = update(value)
else:
# value >= threshold; pass go, collect 200
handle_threshold_reached()
The else clause is executed if you exit a block normally, by hitting the loop condition or falling off the bottom of a try block. It is not executed if you break or return out of a block, or raise an exception. It works for not only while and for loops, but also try blocks.
You typically find it in places where normally you would exit a loop early, and running off the end of the loop is an unexpected/unusual occasion. For example, if you're looping through a list looking for a value:
for value in values:
if value == 5:
print "Found it!"
break
else:
print "Nowhere to be found. :-("
Allow me to give an example on why to use this else-clause. But:
my point is now better explained in Leo’s answer
I use a for- instead of a while-loop, but else works similar (executes unless break was encountered)
there are better ways to do this (e.g. wrapping it into a function or raising an exception)
Breaking out of multiple levels of looping
Here is how it works: the outer loop has a break at the end, so it would only be executed once. However, if the inner loop completes (finds no divisor), then it reaches the else statement and the outer break is never reached. This way, a break in the inner loop will break out of both loops, rather than just one.
for k in [2, 3, 5, 7, 11, 13, 17, 25]:
for m in range(2, 10):
if k == m:
continue
print 'trying %s %% %s' % (k, m)
if k % m == 0:
print 'found a divisor: %d %% %d; breaking out of loop' % (k, m)
break
else:
continue
print 'breaking another level of loop'
break
else:
print 'no divisor could be found!'
The else-clause is executed when the while-condition evaluates to false.
From the documentation:
The while statement is used for repeated execution as long as an expression is true:
while_stmt ::= "while" expression ":" suite
["else" ":" suite]
This repeatedly tests the expression and, if it is true, executes the first suite; if the expression is false (which may be the first time it is tested) the suite of the else clause, if present, is executed and the loop terminates.
A break statement executed in the first suite terminates the loop without executing the else clause’s suite. A continue statement executed in the first suite skips the rest of the suite and goes back to testing the expression.
The else clause is only executed when the while-condition becomes false.
Here are some examples:
Example 1: Initially the condition is false, so else-clause is executed.
i = 99999999
while i < 5:
print(i)
i += 1
else:
print('this')
OUTPUT:
this
Example 2: The while-condition i < 5 never became false because i == 3 breaks the loop, so else-clause was not executed.
i = 0
while i < 5:
print(i)
if i == 3:
break
i += 1
else:
print('this')
OUTPUT:
0
1
2
3
Example 3: The while-condition i < 5 became false when i was 5, so else-clause was executed.
i = 0
while i < 5:
print(i)
i += 1
else:
print('this')
OUTPUT:
0
1
2
3
4
this
My answer will focus on WHEN we can use while/for-else.
At the first glance, it seems there is no different when using
while CONDITION:
EXPRESSIONS
print 'ELSE'
print 'The next statement'
and
while CONDITION:
EXPRESSIONS
else:
print 'ELSE'
print 'The next statement'
Because the print 'ELSE' statement seems always executed in both cases (both when the while loop finished or not run).
Then, it's only different when the statement print 'ELSE' will not be executed.
It's when there is a breakinside the code block under while
In [17]: i = 0
In [18]: while i < 5:
print i
if i == 2:
break
i = i +1
else:
print 'ELSE'
print 'The next statement'
....:
0
1
2
The next statement
If differ to:
In [19]: i = 0
In [20]: while i < 5:
print i
if i == 2:
break
i = i +1
print 'ELSE'
print 'The next statement'
....:
0
1
2
ELSE
The next statement
return is not in this category, because it does the same effect for two above cases.
exception raise also does not cause difference, because when it raises, where the next code will be executed is in exception handler (except block), the code in else clause or right after the while clause will not be executed.
I know this is old question but...
As Raymond Hettinger said, it should be called while/no_break instead of while/else.
I find it easy to understeand if you look at this snippet.
n = 5
while n > 0:
print n
n -= 1
if n == 2:
break
if n == 0:
print n
Now instead of checking condition after while loop we can swap it with else and get rid of that check.
n = 5
while n > 0:
print n
n -= 1
if n == 2:
break
else: # read it as "no_break"
print n
I always read it as while/no_break to understand the code and that syntax makes much more sense to me.
thing = 'hay'
while thing:
if thing == 'needle':
print('I found it!!') # wrap up for break
break
thing = haystack.next()
else:
print('I did not find it.') # wrap up for no-break
The possibly unfortunately named else-clause is your place to wrap up from loop-exhaustion without break.
You can get by without it if
you break with return or raise → the entire code after the call or try is your no-break place
you set a default before while (e.g. found = False)
but it might hide bugs the else-clause knows to avoid
If you use a multi-break with non-trivial wrap-up, you should use a simple assignment before break, an else-clause assignment for no-break, and an if-elif-else or match-case to avoid repeating non-trival break handling code.
Note: the same applies to for thing in haystack:
Else is executed if while loop did not break.
I kinda like to think of it with a 'runner' metaphor.
The "else" is like crossing the finish line, irrelevant of whether you started at the beginning or end of the track. "else" is only not executed if you break somewhere in between.
runner_at = 0 # or 10 makes no difference, if unlucky_sector is not 0-10
unlucky_sector = 6
while runner_at < 10:
print("Runner at: ", runner_at)
if runner_at == unlucky_sector:
print("Runner fell and broke his foot. Will not reach finish.")
break
runner_at += 1
else:
print("Runner has finished the race!") # Not executed if runner broke his foot.
Main use cases is using this breaking out of nested loops or if you want to run some statements only if loop didn't break somewhere (think of breaking being an unusual situation).
For example, the following is a mechanism on how to break out of an inner loop without using variables or try/catch:
for i in [1,2,3]:
for j in ['a', 'unlucky', 'c']:
print(i, j)
if j == 'unlucky':
break
else:
continue # Only executed if inner loop didn't break.
break # This is only reached if inner loop 'breaked' out since continue didn't run.
print("Finished")
# 1 a
# 1 b
# Finished
The else: statement is executed when and only when the while loop no longer meets its condition (in your example, when n != 0 is false).
So the output would be this:
5
4
3
2
1
what the...
Suppose you've to search an element x in a single linked list
def search(self, x):
position = 1
p =self.start
while p is not None:
if p.info == x:
print(x, " is at position ", position)
return True
position += 1
p = p.link
else:
print(x, "not found in list")
return False
So if while conditions fails else will execute, hope it helps!
The better use of 'while: else:' construction in Python should be if no loop is executed in 'while' then the 'else' statement is executed. The way it works today doesn't make sense because you can use the code below with the same results...
n = 5
while n != 0:
print n
n -= 1
print "what the..."
As far as I know the main reason for adding else to loops in any language is in cases when the iterator is not on in your control. Imagine the iterator is on a server and you just give it a signal to fetch the next 100 records of data. You want the loop to go on as long as the length of the data received is 100. If it is less, you need it to go one more times and then end it. There are many other situations where you have no control over the last iteration. Having the option to add an else in these cases makes everything much easier.

Categories