I want to draw a histogram of 2-11 and each bar of the number would reach up to the chain length of that number.
I have a hailstone sequence as given below - import string
-
# from graphics import *
-
from graphics import *
-
-
#Constant
-
MAX = 10000
-
-
# printing functions
-
-
# this function prints a brief description of the program to the user
-
# Inputs: none
-
# Outputs : none
-
def printGreeting():
-
print ""
-
print " This program finds hailstones sequences of numbers"
-
print " you choose. The next number in the sequence if found by"
-
print " either dividing it by two(if even) or multiplying by 3"
-
print " and adding 1(if odd).The program quits when the last"
-
print " number in the sequence is 1\n"
-
-
# this functions prints the menu for the user
-
# Inputs: none
-
# Outputs : none
-
def printMenu():
-
print "\n\tHere are your menu choices:"
-
print "\n\tI - view squence for an individual value\n"
-
print "\tR - veiw sequence for range of values\n"
-
print "\tL - Find the longest chain\n"
-
print "\tH - Print out the histogram\n"
-
print "\tQ - Quit\n\n"
-
-
# end of printing funtions
-
-
-
# hailstone(number) prints the hailstone sequence
-
# Inputs: number
-
# Outputs: none
-
def hailstone(n):
-
-
length = 1
-
print n,
-
# checks if n is not sential
-
while n != 1:
-
-
# if even, divide by 2 (rule). add 1 to length
-
if n % 2 == 0:
-
n = n / 2
-
print "->",n,
-
length = length + 1
-
-
# if odd, multiply by 3, add 1 (rule). add 1 to length
-
elif n % 2 != 0:
-
n = ( 3 * n ) + 1
-
print "->",n,
-
length = length + 1
-
-
# print the length at the end of each chain
-
print "; length =",length
-
print "----------------------------------------------------------------",
-
print "--------------\n"
-
return length
-
-
# this function returns the length of each chain from the starting number, n
-
# Inputs : n
-
# Outputs : none
-
def chain(n):
-
-
length = 1
-
while n != 1:
-
-
# if even, divide by 2 (rule). add 1 to length
-
if n % 2 == 0:
-
n = n / 2
-
length = length + 1
-
-
# if even, divide by 2 (rule). add 1 to length
-
elif n % 2 != 0:
-
n = ( 3 * n ) + 1
-
length = length + 1
-
return length
-
-
# getValidInt() prompts the user to enter an integer in the specified range,
-
# rejects values not in that range by requiring new input, and only returns
-
# a valid integer.
-
# Inputs: the question of the prompt,
-
# the minimum value in the range
-
# and the maximum value in the range
-
# Output: an integer in the specified range
-
def getValidInt(question, min, max):
-
-
# use a bad value to enter the loop
-
value = max + 1
-
-
# compose the prompt
-
prompt = question + " (" + str(min) + "-" + str(max) + "): "
-
-
# continue to get values until the user enters a valid one
-
while value == "" or value < min or value > max:
-
value = raw_input(prompt)
-
if len(value) != 0:
-
value = int(value)
-
-
# return a valid value
-
return value
-
-
-
# this function finds the longest chain
-
# Inputs: none
-
# Outputs : none
-
def longChain():
-
begin = "Please enter the begining integer for the range"
-
end = "Please enter the ending integer for the range"
-
-
# calls to getValidInt for starting and ending values
-
beginNum = getValidInt(begin, 1, MAX)
-
endNum = getValidInt(end, beginNum + 1, MAX)
-
-
largestChain = beginNum
-
-
for i in range(beginNum, endNum+1):
-
if largestChain <= chain(i):
-
largestChain = i
-
length = chain(i)
-
-
print largestChain, " had the longest chain ", length
-
-
# this function finds the longest chain***************************8
-
# Inputs: none*************
-
# Outputs : none
-
def histogram():
-
# initialize variables
-
longestLength = 1
-
list = []
-
-
start = input("Please enter the begining integer for the range: ")
-
for n in range (start, start + 10):
-
length = chain(n)
-
list.append(length)
-
if longestLength <= chain(n):
-
longestLength = n
-
length = chain(n)
-
print longestLength
-
print list
-
-
def main():
-
-
# prints the greeting to the user
-
printGreeting()
-
-
# prints the menu to the user
-
printMenu()
-
-
# asks user the menu choice
-
choice = raw_input("Please enter your choice : ").upper()
-
-
# checks to see if choice entered is from the menu
-
while choice != 'Q':
-
-
# if choice is "I" or "i", proceeds to follow the individual steps
-
if choice == 'I':
-
n = input("Please enter your integer (1-10000):")
-
hailstone(n)
-
-
# if choice is "R" or "r", proceds print each number and its sequence
-
# until the last number is 1, uses getValidInt to get valid integers
-
# for the function
-
elif choice == 'R':
-
-
begin = "Please enter the begining integer for the range"
-
end = "Please enter the ending integer for the range"
-
-
# calls to getValidInt for starting and ending values
-
beginNum = getValidInt(begin, 1, MAX)
-
endNum = getValidInt(end, beginNum + 1, MAX)
-
-
# for loop to get the values between starting and ending value
-
for n in range(beginNum,endNum+1):
-
-
#call to the hailstone function
-
hailstone(n)
-
-
# if choice is "L" or "l", proceeds to use getValidInt again to get the
-
# range, error checks on the range, and then calls the function chain
-
# to determine the length.
-
elif choice == 'L':
-
# call to function longchain
-
longChain()
-
-
elif choice == 'H':
-
histogram()
-
-
# if niether of the menu choices, then it prints that the
-
# entered text is not a valid choices
-
else:
-
print choice, "is not a valid choice"
-
-
# prints the menu to the user
-
printMenu()
-
-
# asks user the menu choice
-
choice = raw_input("Please enter your choice : ").upper()
-
-
main()
but how can i draw a histogram of 2-11 and each bar of the number would reach up to the chain length of that number inside this hailstone sequence.
7 4668
Using matplotlib is probably the best way to do graphing including histograms.
bvdet 2,851
Expert Mod 2GB
Calculate the chains for each number 2 through 11 and save in a dictionary. In Tkinter, you could create a canvas with an X and Y axis on the bottom and left respectively. The X axis would be labeled 2 through 11 and the Y axis would be labeled to match the height of the longest chain. Create rectangles for each number 2 through 11 with an appropriate width for display and height to match the chain length (obtained from the dictionary) multiplied by a factor for an appropriate display.
You could do it that way, but matplotlib is an excellent way to plot graphs. It's used for publications and is very flexible. Here's a link to a histogram demo.
There is another possibility which is to use gnuplot, and gnuplot.py to control it from your programme.
we want to allow the user to draw histograms for more than one range of numbers during the running of the program, we'll want to close the window after having enough time to view it. You should close the window after 10 seconds. You'll need to use sleep() to do this.
All handling of the graphics window should be done within the drawHistogram() function. In fact, since the window is opened in this function, it is local to this function. Trying to close the window in main() will cause an error when run. http://www.cs.umbc.edu/courses/201/f...ges/histo2.jpg bvdet 2,851
Expert Mod 2GB
Glenton - I'm sure you are right, but I wanted to outline how I would do it in Tkinter. I know about matplotlib but have never used it.
asong84 - If using Tkinter, I recommend using widget method after() instead of time.sleep().
A histogram is just rectangles, usually with different fill colors. The following code does not make sense, at least to me, so take a look at the comments. - def histogram():
-
# initialize variables
-
longestLength = 1
-
## list is already used by python to convert something to
-
## a list, so always use another name
-
list = []
-
start = input("Please enter the begining integer for the range: ")
-
for n in range (start, start + 10):
-
-
## You call the same chain(n) 3 times in this function
-
## which doesn't make much sense. Use "length" instead
-
length = chain(n)
-
list.append(length)
-
if longestLength <= chain(n): # chain(n)=length so longestLength <= length
-
longestLength = n
-
length = chain(n) ## you already did this
-
print longestLength
-
print list
dwblas i have already made that changes already, i am now trying to figure out how to make a histogram of chainlength n.
Glenton- am still trying out the matplotlib.will get back to you if i have a problem.
Sign in to post your reply or Sign up for a free account.
Similar topics
by: Oracle3001 |
last post by:
Hi All, I am trying to use JAI to build a histogram of an image i have. I
have posted the code below, and the error I get at runtime. I have taken the
code from the offical java examples, so I am...
|
by: bleh |
last post by:
....to include a removeData(datatoremove) function, to mirror the
existing addData(datatoadd) function. If anybody knows of somewhere
where this has been done already, if you could point me in...
|
by: ext_u |
last post by:
Ok I thought I would try to take the program one thing at a time. (If
you remember my last post I am trying to make a histogram with data on
the size of each word)
Anways first .. I obviously...
|
by: KraftDiner |
last post by:
Hi, I wrote a C++ class that implements an n dimensional histogram in
C++, using stl maps and vectors. I want to code this up now in Python
and would like some input from this group.
The C++...
|
by: Enigma Curry |
last post by:
I'm playing around with matplotlib for the first time. I'm trying to
make a very simple histogram of values 1-6 and how many times they
occur in a sequence. However, after about an hour of...
|
by: Daniel Nogradi |
last post by:
How does one do a histogram on only a part of an image?
This is what I found in the PIL documentation about histogram( ):
"""
im.histogram(mask) =list
Returns a histogram for those parts of...
|
by: arnuld |
last post by:
this is a programme that counts the "lengths" of each word and then
prints that many of stars(*) on the output . it is a modified form of
K&R2 exercise 1-13. the programme runs without any...
|
by: arnuld |
last post by:
i was able to create a solution for a Horizontal-Histogram. i was
completely unable to understand this Vertical-Histogram phenomenon.
even though i have looked at the solution at this page:
...
|
by: avenger3200 |
last post by:
Hello everyone,
I am trying to make a histogram for a project in my class and I really need some help. Here is the question that my instructor provided:
Create 1000 Random numbers between...
|
by: Kurt Smith |
last post by:
On Fri, Jul 25, 2008 at 5:02 PM, aditya shukla
<adityashukla1983@gmail.comwrote:
the 'bins' argument to pylab.hist() is supposed to be an integer or a
list of the bins' lower edges. The default...
|
by: Charles Arthur |
last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
|
by: ryjfgjl |
last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
|
by: emmanuelkatto |
last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud.
Please let me know.
Thanks!
Emmanuel
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
by: Sonnysonu |
last post by:
This is the data of csv file
1 2 3
1 2 3
1 2 3
1 2 3
2 3
2 3
3
the lengths should be different i have to store the data by column-wise with in the specific length.
suppose the i have to...
|
by: Hystou |
last post by:
There are some requirements for setting up RAID:
1. The motherboard and BIOS support RAID configuration.
2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
| |