################################# Program No 0# simple program for histogram# - without functions# - prompting user for the input################################### Build a histogramfrom collections import defaultdictcounters =defaultdict(int)input_list = []entries =int(input("Number of entries? "))for _ inrange(entries): userval =int(input("Enter value:")) input_list.append(userval) counters[userval]+=1if input_list:print("Input values", input_list) histogram =sorted(counters.items())print("Histogram", histogram)print("Visualize the histogram")for i inrange(len(histogram)):print (f'{histogram[i][0]:2}', '*'*histogram[i][1])else:print("No values available to build histogram")################################# Program No 1# using dictionary to build the histogram# - using a randomizer for input# - functionally decomposing the logic################################### Build a histogramimport random# build a random list# returns a list containing numbers 1 <= v <= maxval# the list will contain n elements where# mincount < n < maxcountdefrandom_list(mincount,maxcount,maxval,minval=1): size = random.randint(mincount, maxcount) alist = []for _ inrange(size): alist.append(random.randrange(minval, maxval+1))return alistarlist =random_list(50, 120, 20, -10)print("A random list", arlist)# returns a list containig tuples with# value and frequency, aka a histogramfrom collections import defaultdictdefgenerate_histogram(arlist): counters =defaultdict(int)#inits value to 0for number in arlist: counters[number]+=1 histogram =sorted(counters.items())return histogramhisto =generate_histogram(arlist)print("A histogram with", histo)print("Visualizing the histogram")for i inrange(len(histo)):print (f'{histo[i][0]:2}', '*'*histo[i][1])################################# Program No 2# without using dictionary################################### returns a list of tuples with value and frequencydefgenerate_histogram2(arlist): counters = [0] * (1+max(arlist)) # non-zero valuesfor number in arlist:try: counters[number]+=1except:print(f'**** Error with {number}!')print(f'--- in {histo} with {len(histo)}') histogram = [(i,n)for i, n inenumerate(counters)if n ]return histogramarlist =random_list(50, 120, 20)# positive integersprint("A random list", arlist)histo =generate_histogram2(arlist)print("A histogram with", histo)print("Visualizing the histogram")for i inrange(len(histo)):print (f'{histo[i][0]:2}', '*'*histo[i][1])
Assignment
How many distinct programs are there in the above code?
What is the main advantage of Program 1 over Program 2?
What is the main advantage of Program 2 over Program 1?
Modify Program 1 to display an ordered histogram.
Misc
Provide commentary on the below program source code
Is it okay to use this code for teaching?
If not, why not?
############################# from Charulatha PDF############################defhistogram(items):for n in items: output ='' times = nwhile(times >0): output +='@' times = times -1print(output)histogram([2, 3, 6, 5])
Write a program that prints a histogram of frequencies of alphabet characters occurring in a message.