+ 6
Why do I get a SyntaxError for this code (Python)?
I'm a beginner and having trouble with the "break" function, so I'm playing around with codes with "break". However, no matter what I try, I always get an error (usually SyntaxError) or "No Output". I would like to know what I'm doing wrong and how to correct it. The code is something like this: for num in range(1, 25, 3): if num <= 20: break print(num)
40 Answers
+ 12
Craig The reason why it does not give output is because it will be broken already when num was 1.
That broke the whole for loop and num = 4, 7, 10, 13, 16, 19 and 22 were all ignored, and the code could have continued after the for loop statement.
In this sample "Loop broken" would be printed:
for num in range(1, 25, 3):
if num <= 20:
break
print(num)
print("Loop broken")
+ 8
'Something like this' isn't good enough.
This code snippet works just fine.
Please show us the exact code where the error occurs.
+ 4
Thomas Guyonvarch You might be confusing return and break.
break can always be used in loops.
return can be used in functions (not in lambda defined functions)
+ 4
Craig, it works the same whichever iterable you use. It just depends on you knowing what you're doing.
Your first example was just not set up meaningfully.
You generated a list of numbers going 1, 4, 7 and so on - and then right in the first run of the loop you say:
If the number is equal or lower than 20 (of course 1 is lower than 20!), stop the whole business.
Obviously nothing happens.
It doesn't have to be obvious to you - it takes practice.
But it is thoroughly logical.
+ 3
Maybe the use cases you saw were a bit far-fetched.
Basically (especially in Python) a loop often means that you're walking through a bunch of stuff.
Let's say, you have a very large list of strings and want to work with only those that only consist of letters.
Then you could loop over the whole list and write a condition (pseudo-code):
if not all letters of that work are alphabetic:
continue
This basically means:
Skip this one.
So the loop goes directly into next round.
Another example:
A quiz situation. A user is asked hundred Spanish words and has to give the English translations. If they go through the whole set, they win, but if they make three mistakes, they lose.
So you'd loop over the whole list, but you'd have two conditions in the body:
if input wrong:
mistakes += 1
if mistakes == 3:
break
So break ends the loop *for good*.
+ 2
You can make:
Def work():
For num in range(1,25,3):
if num <=20:
break
print(num)
work()
+ 2
I think you are confused by the break and return elements
+ 2
This I think you are trying to do without using the break!
num = list(range(1, 25, 3))
print(num)
+ 2
Gleem Gleem Yes, that's correct. Now I know why, when I got the error, the error was pointing to the <= symbol.
I'm learning from my mistakes. 😊
+ 2
Harsh Sharma That's what I wanted the code to do; stop before reaching 20. That's why I used <= 20. Sadly, now I know that doesn't work because 1 is less than 20, and the code won't output anything.
+ 1
HonFu I get the error on line 2 and points to the <= symbol.
+ 1
Craig it shouldn't show any error as you have exited the loop because the if statement is true on the very first iteration.
print(num) doesn't mean anything (or give an error) as the scope of num is in the loop only.
+ 1
Seb TheS Thank you. Changing break to continue and <= to >= gives me the result I was looking for.
+ 1
HonFu Thank you for the explanation and the example. It's becoming more clear to me. It looks like break doesn't work well with numbers and/or functions like range in Python.
+ 1
You just need to put 'print' under 'for' not 'if'
for num in range(1, 25, 3):
if num <= 20:
break
print(num)
And by the way the break will be executed in the first loop because num=1 which is <=20
So in your code 'print' will never be executed.
+ 1
Manuel Prochnow Okay, I'll remember that for next time.
+ 1
Lloyd L Conley That's exactly what I was trying to do.
+ 1
You should use > instead of < ,because your loop is breaked for first repetition only. If u use > then output will be 1 4 7 10 13 16 19
0
Could the syntax error be caused by that < and = changed places (=<)
0
I don't see anything wrong with this sample:
for num in range(1, 25, 3):
if num <= 20:
break
print(num)