Ok,so I was bored and decided to copy Stickmasterlukes's button script and rewrote it myself in order to learn new functions.

The problem with this script is that if you stand on the Part for a few seconds and leave it won't fire the function UnTouched properly(It will just stay green),why? Oh,and I don't know what Line 27 is and its purpose( is it a for loop with two variables assigned?).

CurrentlyHitting = {}
------Vairibles------
	Part = script.Parent
		On = BrickColor.new("Bright green")
		Off = BrickColor.new("Bright red")
		------Functions-----
		function FindInTable(Table,Item)--Finds items in a table
			for Number,ItemInTable in pairs (CurrentlyHitting) do--Loops to get all of the objects
				if Item ==ItemInTable--If it finds the object with the excat name return it
					then
					return Item,Number
				end
			end
		end
		----------------------
		function OnTouch(Hit)-- For the Hit Event
			if Hit then--It hit something!
				if not FindInTable(CurrentlyHitting.Hit)--Finds if the that it just hit is on the table,if not then do the following
					then
					table.insert(CurrentlyHitting,Hit)--Inserts it in the table
					Part.BrickColor = On
				end
			end
		end
		----------------------
		function UnTouched(UnHit)--For TouchEnded Event
			local Item,ItemNumber = FindInTable(CurrentlyHitting,UnHit)
				if Item and ItemNumber
					then
					table.remove(CurrentlyHitting,Itemnumber)--Removes it off the Table
					if #CurrentlyHitting == 0--If the table is empty
						then
						Part.BrickColor = Off
					end
				end
			end
		----------------------
		Part.BrickColor = Off	
			------Events-----
			Part.Touched:connect(OnTouch)
			Part.TouchEnded:connect(UnTouched)