[Tutor] syracuse sequence (collatz or hailstone)
Kent Johnson
kent37 at tds.net
Fri Oct 28 21:22:10 CEST 2005
andrade1 at umbc.edu wrote:
> hello,
>
> Could I gather all of the values from print x into a string or a range?
> Since, I am not familiar with lists yet.
Here is a simple example of gathering values into a list and making a string:
>>> r=[] # Start with an empty list
>>> for x in range(3): # x will be 0, 1, 2 in sequence
... r.append(str(x*x)) # Put x*x (as a string) onto r
...
>>> r
['0', '1', '4']
>>> ', '.join(r) # make a single string by joining the elements of r with ', '
'0, 1, 4'
Kent
>
>
> def main():
> x = input("Please enter a positive starting value: ")
> while x != 1:
> if x%2 == 0:
> x = x/2
> else:
> x = x*3+1
> print x
> print "The Syracuse sequence of your starting value is:", x
>
> main()
>
>
>
>
> ----- Original Message -----
> From: "Frank Bloeink" <frankbloeink at nerdshack.com>
> To: <andrade1 at umbc.edu>
> Sent: Friday, October 28, 2005 5:06 AM
> Subject: Re: [Tutor] syracuse sequence (collatz or hailstone)
>
>
>
>>Hey,
>>
>>your code seems almost alright to me, except that in your case it's only
>>printing the last number of your sequence, which obviously is not what
>>you want. Quick fix would be to insert a line "print x" just below else
>>statement:
>>---snip--
>> else:
>> x=x*3+1
>> print x
>>---snip
>>This should make clear where the error is: You are just calculating, but
>>not printing the sequence!
>>If you want to leave the output to the end of the program you could as
>>well gather all the calculated values in a list or similar structure and
>>then print the contents of the list..
>>
>>hth Frank
>>
>>On Fri, 2005-10-28 at 01:22 -0400, andrade1 at umbc.edu wrote:
>>
>>>Hello
>>>
>>>I am trying to create a program that will calculate the syracuse sequence
>>>which is also known as collatz or hailstone. the number that is input by
>>>the user may be either even or odd. the number goes through a series of
>>>functions which are x/2 if the number is even and 3x+1 if the number is
>>>odd. it keeps doing so until the number reaches 1. An example would be if
>>>the user inputed 5 they should recieve: 5, 16, 8, 4, 2, 1 as the sequence
>>>for the value that they started with. My code currently just prints a 1
>>>and none of the numbers that would have preceded it. any ideas on how I
>>>could get the program to not do this would be greatly appreciated.
>>>
>>>
>>>def main():
>>> try:
>>> x = input("Please enter a starting value: ")
>>> while x != 1:
>>>
>>> if x%2 == 0:
>>> x = x/2
>>> else:
>>> x = x*3+1
>>>
>>> except ValueError, excObj:
>>> msg = str(excobj)
>>> if msg == "math domain error":
>>> print "No negatives or decimals."
>>> else:
>>> print "Something went wrong."
>>>
>>>
>>>
>>> print "The Syracuse sequence of your starting value is:", x
>>>
>>>main()
>>>
>>>
>>>_______________________________________________
>>>Tutor maillist - Tutor at python.org
>>>http://mail.python.org/mailman/listinfo/tutor
>>
>>
>>
>
> _______________________________________________
> Tutor maillist - Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>
>
--
http://www.kentsjohnson.com
More information about the Tutor
mailing list