Boolean Wont Work - 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: Boolean Wont Work (/thread-10925.html) |
Boolean Wont Work - fierygaming - Jun-13-2018 Under variables I set up a boolean and later in Mknight() I set it to true then set up an if in Landscape() to check if it was true and if it was to draw it but it Doesnt. PLEASE HELP btw I dont get any errors from graphics import* from pygame import* import pygame import graphics ##Variables## x,y=0,0 #positions of mouse clicks p1 = GraphWin("coord locator",1440,900) Morange=False Mpurple=False ##Main## p1.setBackground('blue') txt = Text(Point(725,125),'Select Your class') txt.setTextColor('red') txt.setSize(16) txt.setFace('times roman') txt.draw(p1) txt1 = Text(Point(690,200),'Mounted Knight\t\t\t\t\t Knight') txt1.setTextColor('red') txt1.setSize(16) txt1.setFace('times roman') txt1.draw(p1) class1=Image(Point(450,400),'Mknightlogo.gif') class1.draw(p1) class2=Image(Point(975,400),'Knightlogo.gif') class2.draw(p1) Mknighto=Image(Point(200,600),'Mknighto.gif') Eknight=Image(Point(1200,700),'Eknight.gif') Mknightp=Image(Point(200,600),'Mknightp.gif') ##Functions## def Landscape(): grass = Rectangle(Point(0,765),Point(1450,900)) grass.setFill('green') grass.draw(p1) sky = Rectangle(Point(0,765),Point(1450,0)) sky.setFill('sky blue') sky.draw(p1) sun=Image(Point(1200,200),'sun.gif') Eknight.draw(p1) while True: if Morange == True: Mknighto.draw(p1) print ('this is working sort of') if Mpurple == True: Mknightp.draw(p1) print ('this is working sort of') def Mknight(): p1.setBackground('green') txt.setText('You haven choosen your trusty study, choose your Colour') txt.draw(p1) txt1.setText('Orange\t\t\t\t\t Purple') txt1.draw(p1) txt1.move(40,0) clr=Image(Point(490,450),'orangecl.gif') clr.draw(p1) clr1=Image(Point(975,450),'purplecl.gif') clr1.draw(p1) while True: p=p1.checkMouse() if p: x=p.getX() y=p.getY() print(x,y) if 290<x<690 and 250<y<650 : txt.undraw() txt1.undraw() clr1.undraw() clr.undraw() Morange = True Landscape() break if 775<x<1175 and 250<y<650 : txt.undraw() txt1.undraw() clr1.undraw() clr.undraw() Mpurple = True Landscape() def Knight(): p1.setBackground('green') txt.setText('You haven choosen your trusty study, choose your Colour') txt.draw(p1) txt1.setText('Orange\t\t\t\t\t Purple') txt1.draw(p1) txt1.move(40,0) clr=Image(Point(490,450),'orangecl.gif') clr.draw(p1) clr1=Image(Point(975,450),'purplecl.gif') clr1.draw(p1) while True: p=p1.checkMouse() p1.setBackground('green') if p: x=p.getX() y=p.getY() print(x,y) if 290<x<690 and 250<y<650 : txt.undraw() txt1.undraw() clr1.undraw() clr.undraw() Knightp=Image(Point(200,600),'Knightp.gif') Knightp.draw(p1) Eknight=Image(Point(100,700),'Eknight.gif') Eknight.draw(p1) Landscape() break if 400<x<690 and 500<y<650 : txt.undraw() txt1.undraw() clr1.undraw() clr.undraw() Knighto=Image(Point(200,600),'Knighto.gif') Knighto.draw(p1) Eknight=Image(Point(1200,700),'Eknight.gif') Eknight.draw(p1) Landscape() break while True: p=p1.checkMouse() p1.setBackground('blue') if p: x=p.getX() y=p.getY() print(x,y) if 300<x<595 and 230<y<560 : txt.undraw() class2.undraw() txt1.undraw() class1.undraw() Mknight() break if 850<x<1103 and 265<y<525 : txt.undraw() class2.undraw() txt1.undraw() class1.undraw() Knight() break RE: Boolean Wont Work - volcano63 - Jun-13-2018 Assignment to "global" variables within functions does not change the variable in the outer scope - it creates new local variables with similar names. The proper way is to pass the value to function as argument and to return value to the outer scope form your function. RE: Boolean Wont Work - fierygaming - Jun-13-2018 (Jun-13-2018, 04:42 PM)volcano63 Wrote: Assignment to "global" variables within functions does not change the variable in the outer scope - it creates new local variables with similar names.Can you give me an example please, im a noob at coding im doing this to learn python RE: Boolean Wont Work - ljmetzger - Jun-13-2018 You've been bitten by the 'global feature' of Python. The following code will demonstrate one way to fix your problem. def myFunction(): p = True return def myFunction2(): global p p = True return def myFunction3(p): p = True return p p = False myFunction() print("p after myFunction = {}.".format(p)) p = False myFunction2() print("p after myFunction2 = {}.".format(p)) p = False p = myFunction3(p) print("p after myFunction3 = {}.".format(p)) Lewis
RE: Boolean Wont Work - fierygaming - Jun-13-2018 Ok so I tried that but it wont go into landscape() now from graphics import* from pygame import* import pygame import graphics ##Variables## x,y=0,0 #positions of mouse clicks p1 = GraphWin("coord locator",1440,900) Morange=False Mpurple=False if Mpurple==True: Landscape() if Morange==True: Landscape() ##Main## p1.setBackground('blue') txt = Text(Point(725,125),'Select Your class') txt.setTextColor('red') txt.setSize(16) txt.setFace('times roman') txt.draw(p1) txt1 = Text(Point(690,200),'Mounted Knight\t\t\t\t\t Knight') txt1.setTextColor('red') txt1.setSize(16) txt1.setFace('times roman') txt1.draw(p1) class1=Image(Point(450,400),'Mknightlogo.gif') class1.draw(p1) class2=Image(Point(975,400),'Knightlogo.gif') class2.draw(p1) Mknighto=Image(Point(200,600),'Mknighto.gif') Eknight=Image(Point(1200,700),'Eknight.gif') Mknightp=Image(Point(200,600),'Mknightp.gif') ##Functions## def Landscape(): grass = Rectangle(Point(0,765),Point(1450,900)) grass.setFill('green') grass.draw(p1) sky = Rectangle(Point(0,765),Point(1450,0)) sky.setFill('sky blue') sky.draw(p1) sun=Image(Point(1200,200),'sun.gif') Eknight.draw(p1) while True: if Morange == True: Mknighto.draw(p1) print ('this is working sort of') if Mpurple == True: Mknightp.draw(p1) print ('this is working sort of') def mknighto(): global Morange Morange = True return def mknightp(): global Mpurple Mpurple = True return def Mknight(): p1.setBackground('green') txt.setText('You haven choosen your trusty study, choose your Colour') txt.draw(p1) txt1.setText('Orange\t\t\t\t\t Purple') txt1.draw(p1) txt1.move(40,0) clr=Image(Point(490,450),'orangecl.gif') clr.draw(p1) clr1=Image(Point(975,450),'purplecl.gif') clr1.draw(p1) while True: p=p1.checkMouse() if p: x=p.getX() y=p.getY() print(x,y) if 290<x<690 and 250<y<650 : txt.undraw() txt1.undraw() clr1.undraw() clr.undraw() mknighto() break if 775<x<1175 and 250<y<650 : txt.undraw() txt1.undraw() clr1.undraw() clr.undraw() mknighto() break RE: Boolean Wont Work - fierygaming - Jun-13-2018 Sorry nvm I just relieved my mistake what you told me helped appreciate +rep ljmetzger |