omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    Help! I need help thinking of python projects I can do.

    Pythonista
    7
    35
    10857
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • mikael
      mikael @Bumbo Cactoni last edited by

      @Bumbo-Cactoni, googling ”beginner Python projects” gave me quite a few good-looking hits, hangman game etc.

      If you find something you like, but are concerned whether it would be doable on Pythonista, we will be happy to help.

      1 Reply Last reply Reply Quote 0
      • stephen
        stephen last edited by

        @Bumbo-Cactoni
        i just posted Space Escape

        you could use this to understand Scene more and create somthing from there? or even add to it. im going to start a new project of a game that will let you set tasks and give experience acordingly with rewards. mostly for kids and to help motivate doing stuff like chores.

        i alo have a RPG Template in the works.this is a more long term project but i hope to get it done soon lol

        1 Reply Last reply Reply Quote 0
        • Bumbo Cactoni
          Bumbo Cactoni last edited by

          This post is deleted!
          1 Reply Last reply Reply Quote 1
          • robStacks
            robStacks last edited by robStacks

            Hi maybe you can help me with this one?
            I am trying to put together a tactical kneepad tool for virtual fighter pilots.
            It helps with situational awareness concrening bullseye BRAA calls in game.
            This is what i got so far and should work out of the box so you can check it out:

            import matplotlib.pyplot as plt
            import numpy as np
            import math
            
            class Vector (list):
                ''' Simple 2D vector class to make vector operations more convenient. If
                performance is a concern, you are probably better off looking at numpy.
                Supports the following operations:
                * Initialization from two arguments, two keyword  arguments (`x` and `y`),
                tuple, list, or another Vector.
                * Equality and unequality comparisons to other vectors. For floating point
                numbers, equality tolerance is 1e-10.
                * `abs`, `int` and `round`
                * Addition and in-place addition
                * Subtraction
                * Multiplication and division by a scalar
                * `len`, which is the same as `magnitude`, see below.
                Sample usage:
                    v = Vector(x = 1, y = 2)
                    v2 = Vector(3, 4)
                    v += v2
                    assert str(v) == '[4, 6]'
                    assert v / 2.0 == Vector(2, 3)
                    assert v * 0.1 == Vector(0.4, 0.6)
                    assert v.distance_to(v2) == math.sqrt(1+4)
                    v3 = Vector(Vector(1, 2) - Vector(2, 0)) # -1.0, 2.0
                    v3.magnitude *= 2
                    assert v3 == [-2, 4]
                    v3.radians = math.pi # 180 degrees
                    v3.magnitude = 2
                    assert v3 == [-2, 0]
                    v3.degrees = -90
                    assert v3 == [0, -2]
                '''
            
                abs_tol = 1e-10
            
                def __init__(self, *args, **kwargs):
                    x = kwargs.pop('x', None)
                    y = kwargs.pop('y', None)
            
                    if x and y:
                        self.append(x)
                        self.append(y)
                    elif len(args) == 2:
                        self.append(args[0])
                        self.append(args[1])
                    else:
                        super().__init__(*args, **kwargs)
            
                @property
                def x(self):
                    ''' x component of the vector. '''
                    return self[0]
            
                @x.setter
                def x(self, value):
                    self[0] = value
            
                @property
                def y(self):
                    ''' y component of the vector. '''
                    return self[1]
            
                @y.setter
                def y(self, value):
                    self[1] = value
            
                def __eq__(self, other):
                    return math.isclose(self[0], other[0], abs_tol=self.abs_tol) and math.isclose(self[1], other[1], abs_tol=self.abs_tol)
            
                def __ne__(self, other):
                    return not self.__eq__(other)
            
                def __abs__(self):
                    return type(self)(abs(self.x), abs(self.y))
            
                def __int__(self):
                    return type(self)(int(self.x), int(self.y))
            
                def __add__(self, other):
                    return type(self)(self.x + other.x, self.y + other.y)
            
                def __iadd__(self, other):
                    self.x += other.x
                    self.y += other.y
                    return self
            
                def __sub__(self, other):
                    return type(self)(self.x - other.x, self.y - other.y)
            
                def __mul__(self, other):
                    return type(self)(self.x * other, self.y * other)
            
                def __truediv__(self, other):
                    return type(self)(self.x / other, self.y / other)
            
                def __len__(self):
                    return self.magnitude
            
                def __round__(self):
                    return type(self)(round(self.x), round(self.y))
            
                def dot_product(self, other):
                    ''' Sum of multiplying x and y components with the x and y components of another vector. '''
                    return self.x * other.x + self.y * other.y
            
                def distance_to(self, other):
                    ''' Linear distance between this vector and another. '''
                    return (Vector(other) - self).magnitude
            
                @property
                def magnitude(self):
                    ''' Length of the vector, or distance from (0,0) to (x,y). '''
                    return math.hypot(self.x, self.y)
            
                @magnitude.setter
                def magnitude(self, m):
                    r = self.radians
                    self.polar(r, m)
            
                @property
                def radians(self):
                    ''' Angle between the positive x axis and this vector, in radians. '''
                    #return round(math.atan2(self.y, self.x), 10)
                    return math.atan2(self.y, self.x)
            
                @radians.setter
                def radians(self, r):
                    m = self.magnitude
                    self.polar(r, m)
            
                def polar(self, r, m):
                    ''' Set vector in polar coordinates. `r` is the angle in radians, `m` is vector magnitude or "length". '''
                    self.y = math.sin(r) * m
                    self.x = math.cos(r) * m
            
                @property
                def degrees(self):
                    ''' Angle between the positive x axis and this vector, in degrees. '''
                    return math.degrees(self.radians)
            
                @degrees.setter
                def degrees(self, d):
                    self.radians = math.radians(d)
            
                def steps_to(self, other, step_magnitude=1.0):
                    """ Generator that returns points on the line between this and the other point, with each step separated by `step_magnitude`. Does not include the starting point. """
                    if self == other:
                        yield other
                    else:
                        step_vector = other - self
                        steps = math.floor(step_vector.magnitude/step_magnitude)
                        step_vector.magnitude = step_magnitude
                        current_position = Vector(self)
                        for _ in range(steps):
                            current_position += step_vector
                            yield Vector(current_position)
                        if current_position != other:
                            yield other
            
                def rounded_steps_to(self, other, step_magnitude=1.0):
                    ''' As `steps_to`, but returns points rounded to the nearest integer. '''
                    for step in self.steps_to(other):
                        yield round(step)
            
            bearingblue = int(input("Bearing blue:"))
            rangeblue = int(input("Range blue:"))
            
            bearingred = int(input("Bearing red:"))
            rangered = int(input("Range red:"))
            
            blue = Vector(rangeblue, 0)
            blue.degrees = bearingblue
            
            red = Vector(rangered, 0)
            red.degrees = bearingred
            
            delta = red - blue
            
            print('Distance:', delta.magnitude)
            print('Bearing:', delta.degrees)
            
            thetablue= np.deg2rad(bearingblue)
            thetared= np.deg2rad(bearingred)
            
            fig = plt.figure()
            
            ax = fig.add_subplot(111, projection='polar')
            
            ax.scatter(thetablue,rangeblue)
            ax.scatter(thetared,rangered, color='r')
            
            ax.set_theta_direction(-1)
            """ax.set_rmax(120)"""
            ax.set_theta_zero_location('N')
            ax.set_title("Plot", va='bottom')
            
            plt.show()
            

            What i want to do next is integrate this into something like sketch.py demo.
            To make it possible to draw things onto like flightpath & annotations etc.
            Also the feature of exporting as img is handy for recap and debriefing.

            Take a look maybe you like this project.

            Regards,

            Robert.

            1 Reply Last reply Reply Quote 0
            • Bumbo Cactoni
              Bumbo Cactoni last edited by

              @robStacks
              You want me to help?
              I don’t know much Python, so I don’t think I’ll be able to help. Sorry. I am working on learning a lot more python, but right now I just don’t have the knowledge or experience to help. I wish I could help. Sorry. :(

              stephen 1 Reply Last reply Reply Quote 0
              • stephen
                stephen @Bumbo Cactoni last edited by

                @Bumbo-Cactoni that request has already be takin care of in another thread but helping others is the best way to learn 😉 you will research stuff and learn aspects you may never have or create new objects to put in your cook book. for example i created this ButtonNode and i probably wouldnof made one at some point but not as neat and propbably not so universal in a way. jump out there help people help you 🤠 community is about teamwork💯

                1 Reply Last reply Reply Quote 0
                • robStacks
                  robStacks last edited by

                  Ok no worries Bumbo i am also a beginner in python and it is a great code language.
                  Its easy to read and understand and with a great communitie very helpfull.
                  I managed to create something awesome and usefull in a short time thx to that.
                  I'll show you my progress so you can see:

                  import math
                  import ui
                  import console
                  import photos
                  import matplotlib.pyplot as plt
                  import numpy as np
                  from io import BytesIO
                  
                  class Vector(list):
                  	abs_tol = 1e-10
                  
                  	def __init__(self, *args, **kwargs):
                  		x = kwargs.pop('x', None)
                  		y = kwargs.pop('y', None)
                  
                  		if x and y:
                  			self.append(x)
                  			self.append(y)
                  		elif len(args) == 2:
                  			self.append(args[0])
                  			self.append(args[1])
                  		else:
                  			super().__init__(*args, **kwargs)
                  
                  	@property
                  	def x(self):
                  		''' x component of the vector. '''
                  		return self[0]
                  
                  	@x.setter
                  	def x(self, value):
                  		self[0] = value
                  
                  	@property
                  	def y(self):
                  		''' y component of the vector. '''
                  		return self[1]
                  
                  	@y.setter
                  	def y(self, value):
                  		self[1] = value
                  
                  	def __eq__(self, other):
                  		return math.isclose(
                  			self[0], other[0], abs_tol=self.abs_tol) and math.isclose(
                  				self[1], other[1], abs_tol=self.abs_tol)
                  
                  	def __ne__(self, other):
                  		return not self.__eq__(other)
                  
                  	def __abs__(self):
                  		return type(self)(abs(self.x), abs(self.y))
                  
                  	def __int__(self):
                  		return type(self)(int(self.x), int(self.y))
                  
                  	def __add__(self, other):
                  		return type(self)(self.x + other.x, self.y + other.y)
                  
                  	def __iadd__(self, other):
                  		self.x += other.x
                  		self.y += other.y
                  		return self
                  
                  	def __sub__(self, other):
                  		return type(self)(self.x - other.x, self.y - other.y)
                  
                  	def __mul__(self, other):
                  		return type(self)(self.x * other, self.y * other)
                  
                  	def __truediv__(self, other):
                  		return type(self)(self.x / other, self.y / other)
                  
                  	def __len__(self):
                  		return self.magnitude
                  
                  	def __round__(self):
                  		return type(self)(round(self.x), round(self.y))
                  
                  	def dot_product(self, other):
                  		''' Sum of multiplying x and y components with the x and y components of another vector. '''
                  		return self.x * other.x + self.y * other.y
                  
                  	def distance_to(self, other):
                  		''' Linear distance between this vector and another. '''
                  		return (Vector(other) - self).magnitude
                  
                  	@property
                  	def magnitude(self):
                  		''' Length of the vector, or distance from (0,0) to (x,y). '''
                  		return math.hypot(self.x, self.y)
                  
                  	@magnitude.setter
                  	def magnitude(self, m):
                  		r = self.radians
                  		self.polar(r, m)
                  
                  	@property
                  	def radians(self):
                  		''' Angle between the positive x axis and this vector, in radians. '''
                  		#return round(math.atan2(self.y, self.x), 10)
                  		return math.atan2(self.y, self.x)
                  
                  	@radians.setter
                  	def radians(self, r):
                  		m = self.magnitude
                  		self.polar(r, m)
                  
                  	def polar(self, r, m):
                  		''' Set vector in polar coordinates. `r` is the angle in radians, `m` is vector magnitude or "length". '''
                  		self.y = math.sin(r) * m
                  		self.x = math.cos(r) * m
                  
                  	@property
                  	def degrees(self):
                  		''' Angle between the positive x axis and this vector, in degrees. '''
                  		return math.degrees(self.radians)
                  
                  	@degrees.setter
                  	def degrees(self, d):
                  		self.radians = math.radians(d)
                  
                  	def steps_to(self, other, step_magnitude=1.0):
                  		""" Generator that returns points on the line between this and the other point, with each step separated by `step_magnitude`. Does not include the starting point. """
                  		if self == other:
                  			yield other
                  		else:
                  			step_vector = other - self
                  			steps = math.floor(step_vector.magnitude / step_magnitude)
                  			step_vector.magnitude = step_magnitude
                  			current_position = Vector(self)
                  			for _ in range(steps):
                  				current_position += step_vector
                  				yield Vector(current_position)
                  			if current_position != other:
                  				yield other
                  
                  	def rounded_steps_to(self, other, step_magnitude=1.0):
                  		''' As `steps_to`, but returns points rounded to the nearest integer. '''
                  		for step in self.steps_to(other):
                  			yield round(step)
                  
                  bearingblue = int(input("Bearing blue: "))
                  rangeblue = int(input("Range blue:   "))
                  
                  bearingred = int(input("Bearing red:  "))
                  rangered = int(input("Range red:    "))
                  
                  blue = Vector(rangeblue, 0)
                  blue.degrees = bearingblue
                  
                  red = Vector(rangered, 0)
                  red.degrees = bearingred
                  
                  delta = red - blue
                  
                  way = np.loadtxt('waypoints.txt')
                  ways = way[:, 0]
                  r = way[:, 1]
                  
                  if delta.degrees < 0:
                  	print('Bearing: ', int(delta.degrees + 360))
                  	print('Distance:', int(delta.magnitude))
                  else:
                  	print('Bearing: ', int(delta.degrees))
                  	print('Distance:', int(delta.magnitude))
                  
                  thetablue= np.deg2rad(bearingblue)
                  thetared= np.deg2rad(bearingred)
                  thetawayp= np.deg2rad(ways)
                  
                  class PathView(ui.View):
                  	def __init__(self, frame):
                  		self.frame = frame
                  		self.flex = 'WH'
                  		self.path = None
                  		self.action = None
                  
                  	def touch_began(self, touch):
                  		x, y = touch.location
                  		self.path = ui.Path()
                  		self.path.line_width = 1
                  		self.path.line_join_style = ui.LINE_JOIN_ROUND
                  		self.path.line_cap_style = ui.LINE_CAP_ROUND
                  		self.path.move_to(x, y)
                  
                  	def touch_moved(self, touch):
                  		x, y = touch.location
                  		self.path.line_to(x, y)
                  		self.set_needs_display()
                  
                  	def touch_ended(self, touch):
                  		# Send the current path to the SketchView:
                  		if callable(self.action):
                  			self.action(self)
                  		# Clear the view (the path has now been rendered
                  		# into the SketchView's image view):
                  		self.path = None
                  		self.set_needs_display()
                  
                  	def draw(self):
                  		if self.path:
                  			self.path.stroke()
                  
                  ax = plt.subplot(111, projection='polar')
                  plt.polar(thetawayp, r)
                  plt.polar(thetawayp, r, 'k.', zorder=3)
                  ax.scatter(thetablue,rangeblue)
                  ax.scatter(thetared,rangered, color='r')
                  ax.set_theta_direction(-1)
                  ax.set_rmax(120)
                  ax.set_theta_zero_location('N')
                  ax.set_title("N ", va='bottom')
                  ax.grid(True)
                  b = BytesIO()
                  
                  plt.savefig(b)
                  
                  
                  class SketchView(ui.View):
                  	def __init__(self, width=768, height=768):
                  		self.bg_color = '#ffffff'
                  		iv = ui.ImageView(frame=(0, 0, width, height))
                  		bg = ui.Image.from_data(b.getvalue())
                  		iv.image = bg
                  		iv.content_mode = ui.CONTENT_SCALE_ASPECT_FILL
                  		image_view = ui.ImageView()
                  		image_view.image = ui.Image.named('Bullseye.png')
                  		image_view.present()
                  		pv = PathView(frame=self.bounds)
                  		pv.action = self.path_action
                  		self.add_subview(iv)
                  		self.add_subview(pv)
                  		blue_button = ui.ButtonItem()
                  		blue_button.title = 'Bluebulls'
                  		blue_button.action = self.bluebulls_action
                  		red_button = ui.ButtonItem()
                  		red_button.title = 'Redbulls'
                  		red_button.tint_color = '#990000'
                  		red_button.action = self.redbulls_action 
                  		maps_button = ui.ButtonItem()
                  		maps_button.title = 'Maps'
                  		maps_button.tint_color = '#000d99'
                  		maps_button.action = self.map_action
                  		save_button = ui.ButtonItem()
                  		save_button.title = 'Save Image'
                  		save_button.action = self.save_action
                  		plot_button = ui.ButtonItem()
                  		plot_button.title = 'Plot'
                  		plot_button.tint_color = '#000d99'
                  		plot_button.action = self.plot_action
                  		clear_button = ui.ButtonItem()
                  		clear_button.title = 'Clear'
                  		clear_button.tint_color = '#af0000'
                  		clear_button.action = self.clear_action
                  		self.right_button_items = [save_button, plot_button, red_button]
                  		self.left_button_items = [clear_button, maps_button, blue_button]
                  		self.image_view = iv
                  
                  	
                  	def map_action(self, sender):
                  # Show an image picker dialog (allowing multiple selection) and print the result
                  		assets = photos.pick_asset(title='Pick a Map', multi=True)
                  		
                  
                  	def path_action(self, sender):
                  		path = sender.path
                  		old_img = self.image_view.image
                  		width, height = 768, 768
                  
                  		with ui.ImageContext(width, height) as ctx:
                  			if old_img:
                  				old_img.draw()
                  			path.stroke()
                  			self.image_view.image = ctx.get_image()
                  						
                  	def redbulls_action(self, sender):
                  		m=1
                  	def bluebulls_action(self, sender):
                  		m=1
                  	def plot_action(self, sender):
                  		self.image_view.image = ui.Image.from_data(b.getvalue())
                  
                  	def clear_action(self, sender):
                  		self.image_view.image = None
                  
                  	def save_action(self, sender):
                  		if self.image_view.image:
                  			# We draw a new image here, so that it has the current
                  			# orientation (the canvas is quadratic).
                  			with ui.ImageContext(self.width, self.height) as ctx:
                  				self.image_view.image.draw()
                  				img = ctx.get_image()
                  				photos.save_image(img)
                  				console.hud_alert('Saved')
                  		else:
                  			console.hud_alert('No Image', 'error')
                  
                  
                  sv = SketchView()
                  sv.name = 'BullseyePad'
                  sv.present()
                  
                  

                  Its starting to look like an useable app already👍🏻

                  I am looking into API's right Now not so hard to use and lots of them look it up.
                  Maybe you can find a nice project for u with the use of API's

                  Goodluck finding a Nice project!

                  mikael 1 Reply Last reply Reply Quote 0
                  • Bumbo Cactoni
                    Bumbo Cactoni last edited by

                    Thank you!
                    Also, I kinda have a slightly random question. What is your favorite app or website to learn python on? I use SoloLearn right now, since it’s free.

                    1 Reply Last reply Reply Quote 0
                    • mikael
                      mikael @robStacks last edited by

                      @robStacks, suggest moving the Vector implementation to a file called vector.py in site-packages. Then you can import it and it does not distract you from your own code.

                      robStacks 1 Reply Last reply Reply Quote 1
                      • robStacks
                        robStacks @mikael last edited by

                        @mikael Yes thx for pointing that out to me did so and is so much better👍🏻

                        1 Reply Last reply Reply Quote 0
                        • Bumbo Cactoni
                          Bumbo Cactoni last edited by

                          Yay! I’ve thought of a good project to do! Hopefully it won’t be too complicated... by the way, does anyone know how to display a picture? I’ve tried googling it, but it’s all a load of mumbo jumbo to me.

                          1 Reply Last reply Reply Quote 0
                          • stephen
                            stephen last edited by stephen

                            @Bumbo-Cactoni

                            Using Image Module:

                            import Image
                            
                            with Image.open('my_img.png') as img:
                                img.show()
                                
                            

                            Using ui Module:

                            import ui
                            
                            class MyView(ui.View):
                                def __init__(self, *args, **kwargs):
                                    self.img = ui.Image.named('my_img.png')
                                    self.iv = ui.ImageView(
                                        image=self.img,
                                        width=ui.get_screen_size()[0],
                                        height=ui.get_screen_size()[1])
                                    self.add_subview(self.iv)
                                    
                            MyView().present('fullscreen')
                            

                            Using scene Module:

                            import scene
                            
                            class MyScene(scene.Scene):
                                def setup(self):
                                    self.sn=scene.SpriteNode(
                                        texture=scene.Texture('my_img.png'),
                                        parent=self,
                                        position=self.size/2)
                                        
                            scene.run(MyScene())
                            
                            1 Reply Last reply Reply Quote 1
                            • Bumbo Cactoni
                              Bumbo Cactoni last edited by Bumbo Cactoni

                              @stephen
                              Thank you!

                              stephen 1 Reply Last reply Reply Quote 0
                              • stephen
                                stephen @Bumbo Cactoni last edited by

                                @Bumbo-Cactoni Your Welcome

                                1 Reply Last reply Reply Quote 1
                                • Bumbo Cactoni
                                  Bumbo Cactoni last edited by

                                  Now I have another question: How do you display a picture that you can move with your finger?

                                  stephen 1 Reply Last reply Reply Quote 0
                                  • stephen
                                    stephen @Bumbo Cactoni last edited by

                                    @Bumbo-Cactoni

                                    😁 I like making these examples! Give me just a few.

                                    1 Reply Last reply Reply Quote 0
                                    • Bumbo Cactoni
                                      Bumbo Cactoni last edited by Bumbo Cactoni

                                      @stephen
                                      Have you ever seen, like, those super simple block-programming apps? That they use to semi-teach people to program?

                                      stephen 1 Reply Last reply Reply Quote 0
                                      • Bumbo Cactoni
                                        Bumbo Cactoni last edited by

                                        I am trying to make my own block-programming thingy, but I don’t know how to create the blocks, make them movable, or even make them connect together.

                                        1 Reply Last reply Reply Quote 0
                                        • stephen
                                          stephen @Bumbo Cactoni last edited by

                                          @Bumbo-Cactoni

                                          Like minecraft/terreria?

                                          1 Reply Last reply Reply Quote 0
                                          • Bumbo Cactoni
                                            Bumbo Cactoni last edited by Bumbo Cactoni

                                            @stephen

                                            You mean like moving the items in the inventories?
                                            If so, yes, that is kinda what I mean.

                                            stephen 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Powered by NodeBB Forums | Contributors