![]() |
Python 25 Line Challenge - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: General (https://python-forum.io/forum-1.html) +--- Forum: Code sharing (https://python-forum.io/forum-5.html) +--- Thread: Python 25 Line Challenge (/thread-37099.html) |
RE: Python 25 Line Challenge - menator01 - May-05-2022 13 lines. I really not like lines being over 80 - 100 characters but, it works from turtle import Turtle, Screen, colormode from random import randint class Turtles(Turtle): def __init__(self): super().__init__() self.speed('fastest'), self.shapesize(5), colormode(255), Screen(), Screen().onclick(self.click), self.ondrag(self.draw), Screen().onkey(self.colors, 'c'), Screen().listen(), Screen().mainloop() def colors(self): self.color((randint(0, 255), randint(0, 255), randint(0, 255))) def click(self, x, y): self.penup(), self.goto(x,y), self.pendown() def draw(self, x, y): self.ondrag(None), self.goto(x, y), self.ondrag(self.draw, btn=1) Turtles() RE: Python 25 Line Challenge - menator01 - May-06-2022 One more. Change background color with button click in tkinter. import tkinter as tk from random import randint def rgb(label): color = tuple(randint(0, 255) for i in range(3)) label['bg'] = f'#%02x%02x%02x' % color root = tk.Tk() label = tk.Label(root, width=50, height=20, relief='groove') label.pack(padx=5, pady=4) button = tk.Button(root, text='change color', command=lambda:rgb(label)).pack(expand=True, fill='both', padx=5, pady=4) root.mainloop() RE: Python 25 Line Challenge - codingCat - May-09-2022 (May-06-2022, 07:33 PM)menator01 Wrote: One more. All right Menator01, I've got one for you. Since you seem to like a challenge I off you this one. It is the classic turtle race example that I have expanded to show a practical use for arrays. Can you get this one down below 25 lines? #Turtle race - An example of using all of the topics #with an introduction to using lists from turtle import * from random import * turtlecnt = 10 #number of turtles in the race linetop = turtlecnt * 30 / 2 #location of top line linebottom = 0 - linetop - 30 #location of bottom line hideturtle() #setup the screen penup() speed("fastest") goto(-200,linetop) pendown() goto(-200,linebottom) penup() goto(200,linetop) pendown() goto(200,linebottom) racers = [] #a list to hold our turtles for i in range(0,turtlecnt): #for each position in the list newturtle = Turtle() #create the turtle racers.append(newturtle) #add it to the turtle list #a list of colors to randomly choose from colors = ["yellow", "gold", "orange", "red", "maroon", "violet", "pink", "magenta", "purple", "navy", "blue", "skyblue", "cyan", "turquoise", "lightgreen", "green", "darkgreen", "chocolate", "brown", "gray", "black"] #Setup the turtles for i in range(0,turtlecnt): #for each turtle in the list clrnum = randint(0,len(colors)-1) #choose a random color racers[i].color(colors[clrnum]) #set the turtle to the color colors.pop(clrnum) #remove the color from the list (avoid repeats) racers[i].shapesize(2) #increase the turtles size racers[i].penup() #no drawing during the race racers[i].goto(-200, (i * 30) - (turtlecnt * 30 / 2)) #goto the starting line racers[i].speed("fastest") #set the speed (same as 0) #repeat until on of the turtles reaches the finish line racing = True #the race is running i = 0 #start at the first turtle tracer(0) #do not automatically update window while racing: #while the race is running racerdist = randint(0,5) #choose a random distance to travel racers[i].forward(racerdist) #for the current turtle, move the random distance if racers[i].xcor() >= 200: #check if that move won the race racing = False #the race is over winpos = i #this turtle won i = i + 1 #setting up for the next turtle if i >= turtlecnt: #have we reached the end of the turtle list? i = 0 #yes? wrap to the beginning update() #manually update the window (needed when tracer is 0) penup() #relocate the default turtle goto(-200,racers[winpos].ycor()) #display the winner write("The winner is turtle " + str(winpos),font=("",25,"")) RE: Python 25 Line Challenge - codingCat - May-09-2022 And here is another offering of my own -- I took the random maze idea from youTube's 8-bit guy and combined it with a random maze idea of my own. I had to do a little research as I've never had a reason to use the single line if/else before (as a teacher, readability is important). from random import randint if randint(0,1) == 0: cnt = 0 while True: str = "/" if randint(0,1) == 0 else "\\" print(str,end="") cnt = cnt + 1 if cnt % 80 == 0: print() else: flag = 0 rooms = 30 while True: flag = 1 if flag == 0 else 0 print("|",end="") for i in range(0,rooms): wall = randint(0,1) if flag == 0: str = "--+" if wall == 0 else " +" else: str = " |" if wall == 0 or i == rooms - 1 else " " print(str,end="") print("") RE: Python 25 Line Challenge - Coricoco_fr - May-09-2022 (May-09-2022, 12:17 PM)codingCat Wrote: And here is another offering of my own -- I took the random maze idea from youTube's 8-bit guy and combined it with a random maze idea of my own. I had to do a little research as I've never had a reason to use the single line if/else before (as a teacher, readability is important). Hello, from random import randint if randint(0,1) == 0: while True: for cnt in range(1, 81): print("/" if randint(0,1) == 0 else "\\", end="" if cnt != 80 else "\n") flag = 0 while True: flag = 1 if flag == 0 else 0 print("|",end="") for i in range(0,rooms:=30): wall = randint(0,1) if flag == 0: print("--+" if wall == 0 else " +", end="" if i !=29 else "\n") else: print(" |" if wall == 0 or i == rooms - 1 else " ", end="" if i!=29 else "\n") RE: Python 25 Line Challenge - codingCat - May-09-2022 (May-09-2022, 01:11 PM)Coricoco_fr Wrote:from random import randint for cnt in range(1, 81): print("/" if randint(0,1) == 0 else "\\", end="" if cnt != 80 else "\n") for i in range(0,rooms:=30): wall = randint(0,1) if flag == 0: print("--+" if wall == 0 else " +", end="" if i !=29 else "\n") else: print(" |" if wall == 0 or i == rooms - 1 else " ", end="" if i!=29 else "\n") Wow, those for loops hurt my brain. RE: Python 25 Line Challenge - menator01 - May-09-2022 If you remove comments and spacing, got it to 31 lines. from random import choice, randint from turtle import Turtle, write, goto, penup, pendown, speed, hideturtle from time import sleep # List of 10 colors colors = ['yellow', 'orange', 'red', 'pink', 'purple', 'blue', 'green', 'brown', 'gray', 'black'] # Hide the turtle and draw the start and finish line hideturtle(), speed('fastest') penup(), goto(-200, 10*30/2), pendown(), goto(-200, 0-270) penup(), goto(200, 10*30/2), pendown(), goto(200, 0-270) class MyTurtle(Turtle): '''Create turtle objects and set properties''' def __init__(self, pos): super().__init__() color = colors.pop(randint(0, len(colors)-1)) if colors else None self.color(color), self.shapesize(2) self.penup() self.goto(-200, (pos*30) - (10*30/2)) # Create a list of turtle objects turtles = list(MyTurtle(i-2.5) for i in range(1, 11)) # Set a variable for accessing turtle objects i = 0 # Setup a while loop racing = True while racing: # Create a random distance to travel and icrease i turtles[i := (i + 1) % len(turtles)].forward(randint(0, 5)) # Track movement of turtle object in list # First to line wins goes to home and writes winner # Sleep for five seconds to see the winner if turtles[i].xcor() >= 200: winner = turtles[i] winner.write(f'winner: turtle {i+1}', font=('system', 25, 'bold')) sleep(5) racing = False Updated code. Now 25 lines without spaces and comments RE: Python 25 Line Challenge - Gribouillis - May-09-2022 @menator01 You can remove line 36 if you replace line 37 with i = (i + 1) % len(turtles) RE: Python 25 Line Challenge - codingCat - May-09-2022 (May-09-2022, 06:04 PM)menator01 Wrote: If you remove comments and spacing, got it to 31 lines. There is another technique that is new to me... can you explain the comma separator between the commands? Does python let you separate commands with a comma the way MS BASIC did with the colon, or is there a special case I am missing? RE: Python 25 Line Challenge - menator01 - May-09-2022 Thanks Gribouillis. 30 lines now |