Re: [Tutor] Turtle Issues
On 06/03/18 18:12, Roger Lea Scherer wrote: > I know I don't have to apologize, but I am so independent I hate asking for > help and you guys and gals have been so helpful that now that I'm stuck > again I'm sorry I have to. Thats not a problem and, in programming, is usually seen as a strength not a weakness. Nobody likes to debug somebody else's bad code, it's much better to get advice and write good code first time! Independence is the fault, not collaboration. > All I want to do (famous last words) is randomize the color of the pen when > the ciphers are created, but when the ciphers are created, the color > remains black. You do seem to have a liking for writing an awful lot of unnecessary code. Have you come across the concept of functions? They allow you to take common code and encapsulate it in a single call. Thus: > if digits[-1] == "1": > pu() > goto(0, 100) > seth(90) > pd() > fd(35) > > if digits[-1] == "2": > pu() > goto(0, 65) > seth(90) > pd() > fd(35) Becomes def f(y): pu() goto(0, y) seth(90) pd() fd(35) if digits[-1] == "1": f(100) if digits[-1] == "2": f(65) And ideally you use a more meaningful name than 'f'! Maybe reposition() or similar? The principle is known as DRY in software engineering: - Don't Repeat Yourself Also we already (I think it was for you) pointed out that using an int() conversion with try/except was easier and more reliable that a regex. Its also much less code. So unless you really enjoy practising your typing, it's easier to do something like: d = input("Enter an integer less than 10,000 greater than 0: ") try: int(d) except: # they are not digits so deal with it # now use d knowing it is all digits. > The comments below colormode are things I've tried as well. > I include all the code in case you want to run the program. > > So if you could please help like you do, that would be great and greatly > appreciated. Thank you. > > > > from turtle import * > import re > import random > > > # use turtle to draw ciphers of the Cistercian monks > > digits = input("Please enter an integer less than 10,000 greater than 0: ") > > r = random.randrange(0, 255) > g = random.randrange(0, 255) > b = random.randrange(0, 255) You set these values once. And never change them. > colormode(255) > ##reddish = random.randrange(255) > ##greenish = random.randrange(255) > ##bluish = random.randrange(255) > ##pencolor(reddish, greenish, bluish) You don't draw anything so how do you know what colour is set? You have to draw a line to see the color. > # pencolor(random.randrange(255), random.randrange(255), > random.randrange(255)) > pencolor(r, g, b) Same goes for these. > mode("logo") # resets turtle heading to north > speed(0) > ht() > fd(100) Now you draw something, what color is it? (although you might need a pd() to force the pen on to the canvas) > # if statements for the ones position > if digits[-1] == "1": See the comments about functions above... And only do the extraction once: last = d[-1] if last == "1": f(...) elif last == "2): f(...) elif last = "3" etc... > if digits[-1] == "3": > pu() > goto(0, 100) > seth(135) > pd() > fd(50) I see a new value in the last line so maybe f becomes def f(y,d): pu() goto(0, y) seth(135) pd() fd(d) It still saves a heck of a lot of typing! > if digits[-1] == "5": > pu() > goto(0, 100) > seth(90) > pd() > fd(35) > rt(135) > fd(50) And here you add two lines so either just tag the two lines after f or define a new function: def g(y,d,angle,d2): f(y,d) rt(angle) fd(d2) I strongly suspect we can simplify this a lot more but that should be a start. But as to the colors, you only draw one line and you only set the color once so it's hard to see how randomising anything is going to be useful. -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor
[Tutor] Turtle Issues
I know I don't have to apologize, but I am so independent I hate asking for help and you guys and gals have been so helpful that now that I'm stuck again I'm sorry I have to. I've looked on StackOverflow and followed their advice (which I can't make work) and went to the python/turtle documentation which I tried to follow, but can't seem to make work either. All I want to do (famous last words) is randomize the color of the pen when the ciphers are created, but when the ciphers are created, the color remains black. The comments below colormode are things I've tried as well. I include all the code in case you want to run the program. So if you could please help like you do, that would be great and greatly appreciated. Thank you. from turtle import * import re import random # use turtle to draw ciphers of the Cistercian monks digits = input("Please enter an integer less than 10,000 greater than 0: ") r = random.randrange(0, 255) g = random.randrange(0, 255) b = random.randrange(0, 255) # ensure input is only digits p = re.compile(r'^\d+$') m = p.match(digits) if m: print(digits) m = digits #digits = input("Please enter an integer less than 10,000 greater than 0: ") else: print("No match") colormode(255) ##reddish = random.randrange(255) ##greenish = random.randrange(255) ##bluish = random.randrange(255) ##pencolor(reddish, greenish, bluish) # pencolor(random.randrange(255), random.randrange(255), random.randrange(255)) pencolor(r, g, b) mode("logo") # resets turtle heading to north speed(0) ht() fd(100) # if statements for the ones position if digits[-1] == "1": pu() goto(0, 100) seth(90) pd() fd(35) if digits[-1] == "2": pu() goto(0, 65) seth(90) pd() fd(35) if digits[-1] == "3": pu() goto(0, 100) seth(135) pd() fd(50) if digits[-1] == "4": pu() goto(0, 65) seth(45) pd() fd(50) if digits[-1] == "5": pu() goto(0, 100) seth(90) pd() fd(35) rt(135) fd(50) if digits[-1] == "6": pu() goto(30, 100) seth(180) pd() fd(35) if digits[-1] == "7": pu() goto(0, 100) seth(90) pd() fd(35) rt(90) fd(35) if digits[-1] == "8": pu() goto(0, 65) seth(90) pd() fd(35) lt(90) fd(35) if digits[-1] == "9": pu() goto(0, 100) seth(90) pd() fd(35) rt(90) fd(35) rt(90) fd(35) # if statements for the tens position if digits[-2:-1] == "1": pu() goto(0, 100) seth(-90) pd() fd(35) if digits[-2:-1] == "2": pu() goto(0, 65) seth(-90) pd() fd(35) if digits[-2:-1] == "3": pu() goto(0, 100) seth(-135) pd() fd(50) if digits[-2:-1] == "4": pu() goto(0, 65) seth(-45) pd() fd(50) if digits[-2:-1] == "5": pu() goto(0, 100) seth(-90) pd() fd(35) lt(135) fd(50) if digits[-2:-1] == "6": pu() goto(-30, 100) seth(180) pd() fd(35) if digits[-2:-1] == "7": pu() goto(0, 100) seth(-90) pd() fd(35) lt(90) fd(35) if digits[-2:-1] == "8": pu() goto(0, 65) seth(-90) pd() fd(35) rt(90) fd(35) if digits[-2:-1] == "9": pu() goto(0, 100) seth(-90) pd() fd(35) lt(90) fd(35) lt(90) fd(35) # if statments for the hundreds position if digits[-3:-2] == "1": pu() goto(0, 0) seth(90) pd() fd(35) if digits[-3:-2] == "2": pu() goto(0, 35) seth(90) pd() fd(35) if digits[-3:-2] == "3": pu() goto(0, 0) seth(45) pd() fd(50) if digits[-3:-2] == "4": pu() goto(0, 35) seth(135) pd() fd(50) if digits[-3:-2] == "5": pu() goto(0, 0) seth(90) pd() fd(35) lt(135) fd(50) if digits[-3:-2] == "6": pu() goto(30, 0) seth(0) pd() fd(35) if digits[-3:-2] == "7": pu() goto(0, 0) seth(90) pd() fd(35) lt(90) fd(35) if digits[-3:-2] == "8": pu() goto(0, 35) seth(90) pd() fd(35) rt(90) fd(35) if digits[-3:-2] == "9": pu() goto(0, 0) seth(90) pd() fd(35) lt(90) fd(35) lt(90) fd(35) # if statments for the thousands position if digits[-4:-3] == "1": pu() goto(0, 0) seth(-90) pd() fd(35) if digits[-4:-3] == "2": pu() goto(0, 35) seth(-90) pd() fd(35) if digits[-4:-3] == "3": pu() goto(0, 0) seth(-35) pd() fd(50) if digits[-4:-3] == "4": pu() goto(0, 35) seth(-135) pd() fd(50) if digits[-4:-3] == "5": pu() goto(0, 0) seth(-90) pd() fd(35) rt(135) fd(50) if digits[-4:-3] == "6": pu() goto(-30, 0) seth(0) pd() fd(35) if digits[-4:-3] == "7": pu() goto(0, 0) seth(-90) pd() fd(35) rt(90) fd(35) if