Python Forum
Python 25 Line Challenge
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Python 25 Line Challenge
#11
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()
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags


Reply
#12
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()
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags


Reply
#13
(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,""))
Reply
#14
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("")
Reply
#15
(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).

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("")

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")
I speak Python but I don't speak English (I just read it a little). If I express myself badly, please blame the translator^^.
Reply
#16
(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.
Reply
#17
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
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags


Reply
#18
@menator01 You can remove line 36 if you replace line 37 with
i = (i + 1) % len(turtles)
Reply
#19
(May-09-2022, 06:04 PM)menator01 Wrote: If you remove comments and spacing, got it to 31 lines.
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)

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?
Reply
#20
Thanks Gribouillis. 30 lines now
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags


Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Python 100 line Challenge codingCat 9 3,264 Jun-20-2022, 07:18 AM
Last Post: Coricoco_fr
  Zen Python Challenge ichabod801 3 4,108 Aug-13-2018, 12:02 AM
Last Post: ichabod801

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020