====== learning python3 - barGraph.py - small program to generate an ascii bargraph of any width ======
These are my first steps in python programming language. The result is a little program that draws an ascii bargraph on to your console window, platform independend. it comes with 3 internal demos to show what it can do so far. its not really a beauty and could be done better, but for my first steps in python im quiet happy with my progress in learning python so far. So to help out others to help learn python or help with their programming projects , my code is 100% free to use for any non-commercial personal and non-commercial educational use. have fun with it!
If you have suggestions, patches or want to share your own personal version with me just drop me an email. ill be happy to review other solutions too .
See this part of Demo 3 showing a 50 character wide bargraph. :
61% [==========================.................]
===== The code =====
""" display an ascii barGraph within the boundary of a terminal console.
This is just an experiment for learning and do to some
practicing on python3.
code is free for non-commercial personal and educational use.
Author: Axel Werner [axel.werner.1973@gmail.com]
Version: 2015-08-10
Personal Comments and ToDos:
=============================
- i know this code is not very beautiful yet and is very cluttered. if i would
reuse it, i should convert it into a class and do more re-factoring to make
it friendlier to read and easy to maintain.
"""
import shutil
import random
import time
consoleWidth, consoleHeight = shutil.get_terminal_size() # returns a integer tuple
leftDelimiter="["
rightDelimiter="]"
progressBarChar="="
progressBarFillerChar="."
limiterLastRandNum=0.5 # global
def getProgressBar( progressPercentage=0.0, width=50 ):
""" return progressBar as string ranging from float 0.0 to 1.0 ."""
if progressPercentage > 1:
print("ERROR: percentage must be between 0.0 and 1.0")
print(" instead the percentage i received is:", progressPercentage)
exit(1)
percentageDisplayStr= str(int(progressPercentage*100))+"%"
LengthOfpercentageDisplayStr=len(percentageDisplayStr)
maxWidthOfpercentageDisplayStr=4 # '100%'
numOfFillersNeeded=maxWidthOfpercentageDisplayStr-LengthOfpercentageDisplayStr
percentageDisplayStr=percentageDisplayStr+numOfFillersNeeded*" "
maxBarWidth=width-1-( len(leftDelimiter)+len(rightDelimiter)+len(percentageDisplayStr) )
effectiveWidthOfProgressBar=int(maxBarWidth*progressPercentage)
effectiveWidthOfFillerBar=int(maxBarWidth-effectiveWidthOfProgressBar)
progressString=effectiveWidthOfProgressBar*progressBarChar
fillerString=effectiveWidthOfFillerBar*progressBarFillerChar
wholeBarStr=percentageDisplayStr+leftDelimiter+progressString+fillerString+rightDelimiter
return wholeBarStr
def limitedRandGen():
""" return a random Number between 0.0 and 1.0 within limited dynamic range of 3%. """
global limiterLastRandNum
newRandNum=random.random()
delta=abs(limiterLastRandNum-newRandNum) # Betrag bestimmen (Vorzeichen ignorieren)
while (delta*100) > 3.0 : # set limitation percentage here
newRandNum=random.random()
delta=abs(limiterLastRandNum-newRandNum) # Betrag bestimmen (Vorzeichen ignorieren)
limiterLastRandNum=newRandNum
return newRandNum
print("\n"*3)
print("DEMO1: run bargraph straight from 0 to 100%")
for progress in range(100+1):
print( getProgressBar(progress/100.0, width=consoleWidth) )
print("\n"*3)
print("DEMO2: displaying 300 random percentages barGraphs on the same line at full width")
numOfFrames=300
for i in range(numOfFrames):
print( "\r" + getProgressBar( progressPercentage=limitedRandGen(), width=consoleWidth ), end="" )
time.sleep(50 / 1000) # delays for x seconds
print("\n"*3)
print("DEMO3: displaying 300 random percentages barGraphs on the same line at width=50")
numOfFrames=300
for i in range(numOfFrames):
print( "\r" + getProgressBar( progressPercentage=limitedRandGen(), width=50 ), end="" )
time.sleep(50 / 1000) # delays for x seconds
print("\n"*3)
print("consoleWidth =", consoleWidth)
input("press ENTER to continue...")
--- //[[mail@awerner.myhome-server.de|Axel Werner]] 2015-08-10 15:10//
{{tag>python3 python programming computer science learning software development}}