[HELP] Nested conditional? double condition followed by another condition. - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: [HELP] Nested conditional? double condition followed by another condition. (/thread-27257.html) |
[HELP] Nested conditional? double condition followed by another condition. - penahuse - May-31-2020 Im trying to learn python but struggling on this problem. I will be thankfull if anyone give me some help. while button1_pressed and button2_pressed: #no matter which one is pressed first to me do some while button3_pressed: #only if it is pressed after button1 and button2 are pressed do some2 if button2_is_not_pressed: breakin practice "do some2" activates even when I press button 3 before buttons 1 and 2. Anyone can help me, please? RE: [HELP] Nested conditional? double condition followed by another condition. - Yoriz - May-31-2020 button1_pressed and button2_pressed must both be True before you press button 3.
RE: [HELP] Nested conditional? double condition followed by another condition. - penahuse - May-31-2020 (May-31-2020, 03:00 PM)Yoriz Wrote: Thank you for your answer but i do not fully understand. English isnt my first language. The button1_pressed , button2_pressed and button3_pressed are functions. I forgot to mention that.def button1_pressed(): # Returns true if the left mouse button is pressed button1_state = win32api.GetKeyState(0x01) return button1_state < 0 def button2_pressed(): # Returns true if the right mouse button is pressed button2_state = win32api.GetKeyState(0x02) return button2_state < 0 def button3_pressed(): # Returns true if the M button is pressed button3_state = win32api.GetKeyState(0x4D) return button3_state < 0 while button1_pressed() and button2_pressed(): # No matter which one is pressed first to me do some while button3_pressed(): # Only if it is pressed after button1 and button2 are pressed do some2 if button2_pressed() == 0: breakThe problem is: if I press button3_pressed even before button1_pressed and button2_pressed do some2 activate. I do not want this..
RE: [HELP] Nested conditional? double condition followed by another condition. - Yoriz - May-31-2020 button1_pressed = True button2_pressed = True button3_pressed = True button2_is_not_pressed = True while button1_pressed and button2_pressed: print('do some') # this only happens if both the above are True while button3_pressed: print('do some2') # theis only happens if button3_pressed is True if button2_is_not_pressed: break # this only breaks the inner while loop break # added an extra break else it would just be stuck in an endless outer loop The following conditions nothing will happenbutton1_pressed = False button2_pressed = True button3_pressed = True button2_is_not_pressed = True while button1_pressed and button2_pressed: print('do some') # this only happens if both the above are True while button3_pressed: print('do some2') # theis only happens if button3_pressed is True if button2_is_not_pressed: break # this only breaks the inner while loop break # added an extra break else it would just be stuck in an endless loop
button1_pressed and button2_pressed must be returning True even though you think they should not be.
RE: [HELP] Nested conditional? double condition followed by another condition. - penahuse - May-31-2020 (May-31-2020, 03:35 PM)Yoriz Wrote:button1_pressed = True button2_pressed = True button3_pressed = True button2_is_not_pressed = True while button1_pressed and button2_pressed: print('do some') # this only happens if both the above are True while button3_pressed: print('do some2') # theis only happens if button3_pressed is True if button2_is_not_pressed: break # this only breaks the inner while loop break # added an extra break else it would just be stuck in an endless outer loopThe following conditions nothing will happen I really apreciate your help... but imagine this situation: 1 - user press button1 and button2 then press button3 Its ok to me "do some 2" 2 - user press button2 and button1 then press button3 Its ok to me "do some 2" but 3 - user press button3 before button1 and button2 Its not ok to "do some2", I need just to "do some" Mate, I should have mentioned that this whole code is inside a Main loop. Im sorry!! So.. I Thinks to test should be like this: button1_pressed = True button2_pressed = True button3_pressed = True button2_is_not_pressed = True while True: while button1_pressed and button2_pressed: print('do some') # this only happens if both the above are True while button3_pressed: print('do some2') # theis only happens if button3_pressed is True if button2_is_not_pressed: break # this only breaks the inner while loop break # added an extra break else it would just be stuck in an endless outer loop RE: [HELP] Nested conditional? double condition followed by another condition. - DreamingInsanity - May-31-2020 In your function, you get the state of the button press. It can be an integer between 1 and 0 (pressed or not pressed). When you return it, to get a True or False output you check if it is less than 0. When the key isn't pressed, button_state is going to be 0: 0 < 0 = True. Meaning when the button isn't pressed the while loop can still run. Surely you would want something like this: return bool(button1_state)Since bool(0) returns False, and bool(1) returns True. Am I missing something here? RE: [HELP] Nested conditional? double condition followed by another condition. - penahuse - May-31-2020 (May-31-2020, 04:22 PM)DreamingInsanity Wrote: In your function, you get the state of the button press. It can be an integer between 1 and 0 (pressed or not pressed). Thank you for your answer. I made some mistakes editing the posts.. Could you give a look a it: def button1_pressed(): # Returns true if the left mouse button is pressed button1_state = win32api.GetKeyState(0x01) return button1_state < 0 def button2_pressed(): # Returns true if the right mouse button is pressed button2_state = win32api.GetKeyState(0x02) return button2_state < 0 def button3_pressed(): # Returns true if the M button is pressed button3_state = win32api.GetKeyState(0x4D) return button3_state < 0 while True: while button1_pressed() and button2_pressed(): # No matter which one is pressed first to me print("do some") while button3_pressed(): # Only if it is pressed after button1 and button2 are pressed print("do some2") if button2_pressed() == 0: break # this only breaks the inner while loop break # added an extra break else it would just be stuck in an endless loopI forgot to mention this whole code is inside a main loop. RE: [HELP] Nested conditional? double condition followed by another condition. - DreamingInsanity - May-31-2020 @penahuse Try this: def button1_pressed(): # Returns true if the left mouse button is pressed button1_state = win32api.GetKeyState(0x01) return bool(button1_state) def button2_pressed(): # Returns true if the right mouse button is pressed button2_state = win32api.GetKeyState(0x02) return bool(button2_state) def button3_pressed(): # Returns true if the M button is pressed button3_state = win32api.GetKeyState(0x4D) return bool(button3_state) while True: while button1_pressed() and button2_pressed(): # No matter which one is pressed first to me print("do some") while button3_pressed(): # Only if it is pressed after button1 and button2 are pressed print("do some2") if button2_pressed() == 0: break # this only breaks the inner while loop break # added an extra break else it would just be stuck in an endless loop RE: [HELP] Nested conditional? double condition followed by another condition. - penahuse - May-31-2020 (May-31-2020, 04:52 PM)DreamingInsanity Wrote: @penahuse Did not work well. Printed infinite "do some" until I click again any mouse button again (to return False) but I need it to work only if the buttons are pressed at same time. I apreciate your try anyway! RE: [HELP] Nested conditional? double condition followed by another condition. - DreamingInsanity - May-31-2020 I did some testing. If you use 'GetAsyncKeyState' it should work. 'GetAsyncKeyState' is basically 'isKeyPressed' so the moment you let go of a button, it will no longer return true. def button1_pressed(): # Returns true if the left mouse button is pressed button1_state = win32api.GetAsyncKeyState(0x01) return bool(button1_state) def button2_pressed(): # Returns true if the right mouse button is pressed button2_state = win32api.GetAsyncKeyState(0x02) return bool(button2_state) def button3_pressed(): # Returns true if the M button is pressed button3_state = win32api.GetAsyncKeyState(0x4D) return bool(button3_state) while True: while button1_pressed() and button2_pressed(): # No matter which one is pressed first to me print("do some") while button3_pressed(): # Only if it is pressed after button1 and button2 are pressed print("do some2") if button2_pressed() == 0: break # this only breaks the inner while loop break # added an extra break else it would just be stuck in an endless loop |