-1

Below is a simple python code, which just prints the actual time/date with delay. I would be very grateful if someone can explain to me (as simply as possible) when and why the programm goes into the if statement (if exitFlag:) What is the statement? if exitFLag == True? Sry I don't understand this line.

I tried to copy the function with a similiar and simpler code. But here the programm won't go into the if statement. I hope someone can help me to understand the code better.

test = 0
counter = 10
while counter:
    if test:
        print("if-statement is called")
        break
    print("still in loop")
    counter -=1
import threading
import time


exitFlag = 0

class myThread(threading.Thread):
    def __init__(self, threadID, name, counter):        
        threading.Thread.__init__(self)                 
        self.threadID = threadID                        
        self.name = name
        self.counter = counter

    def run(self):                                      
        print("Starting " + self.name)
        print_time(self.name, self.counter, 5)          
        print("Exiting " + self.name)


def print_time(threadName, counter, delay):
    while counter:
        if exitFlag:                                   
            threadName.exit()
        time.sleep(delay)
        print("%s: %s" % (threadName, time.ctime(time.time())))
        counter -= 1


thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)

thread1.start()
thread2.start()
thread1.join()
thread2.join()

print("Exiting main thread")

Drailer
  • 13
  • 1
  • [Python `while x:` statement](https://stackoverflow.com/questions/46045023/python-while-x-statement) is another effective duplicate, as is [Python evaluates 0 as false](https://stackoverflow.com/questions/12497199/python-evaluates-0-as-false). – Charles Duffy Aug 20 '19 at 21:05
  • ...either way, none of the code here will ever enter the `if exitFlag:` or `if test:` sections, because nothing in either section ever assigns truthy values to the tested variables. – Charles Duffy Aug 20 '19 at 21:06

1 Answers1

-1

So in Truth Value Testing (when you check if something is true or false), you can use a lot of different values.

Python's Docs say you can use the following values to represent false:

  • None
  • False
  • zero of any numeric type, for example, 0, 0L, 0.0, 0j.
  • any empty sequence, for example, '', (), [].
  • any empty mapping, for example, {}.
  • instances of user-defined classes, if the class defines a __nonzero__() or __len__() method, when that method returns the integer zero or bool value False.

Anything else evaluates to true.

In this program, exitFlag is an integer. The code

if exitFlag:                                   
        threadName.exit()

is basically saying: "If exitFlag is not 0, exit the thread"

That being said, the code never seems to change exitFlag from 0, so this if statement will likely never be entered

Katie
  • 51
  • 7