\$\begingroup\$
\$\endgroup\$
1
I am a beginner in python. I found this problem in the book Automate the Boring Stuff with Python. How can I improve this program using latest version of python.
def generateCollatzSequence(number):
print(str(number) + " ")
while number != 1:
if number % 2 == 0:
number = number / 2
print(str(number) + " ")
elif number % 2 == 1:
number = (3 * number) + 1
print(str(number) + " ")
#print("Enter number: ")
inputNumber = int(input("Enter number: "))
generateCollatzSequence(inputNumber)
asked Jun 20, 2019 at 7:12
-
2\$\begingroup\$ Have a look at codereview.stackexchange.com/q/205785/35991, codereview.stackexchange.com/q/194837/35991, and codereview.stackexchange.com/q/221741/35991 for quite similar questions. \$\endgroup\$Martin R– Martin R2019年06月20日 07:59:17 +00:00Commented Jun 20, 2019 at 7:59
1 Answer 1
\$\begingroup\$
\$\endgroup\$
0
- Your function is called
generate
but it doesn't return anything. Insteaddisplay
would be a better name. - It would be better if you had two functions one to generate the values, one to display them.
- Function names should be
lower_snake_case
to be idiomatic. + " "
is not needed, as print makes the value go to the next line anyway.str(number)
also isn't needed asprint
will do this automatically for you.
Thanks @Toby Speight:
- You can move the
print
to be after both theif
and theelse
.
def generate_collatz_sequence(number):
output = [number]
while number != 1:
if number % 2 == 0:
number = number / 2
elif number % 2 == 1:
number = (3 * number) + 1
output.append(number)
def display_collatz_sequence(values):
for number in values:
print(number)
If you want this to still display values in real time, then you can make generate_collatz_sequence
a generator function.
def generate_collatz_sequence(number):
yield number
while number != 1:
if number % 2 == 0:
number = number / 2
elif number % 2 == 1:
number = (3 * number) + 1
yield number
answered Jun 20, 2019 at 14:54
lang-py