Del*_*yer 14 python python-3.4
我正在尝试使用Python自动化无聊的第3章末尾的项目指南编写一个collatz程序.我正在使用python 3.4.0.这是项目大纲:
编写一个名为collatz()的函数,它有一个名为number的参数.如果number为偶数,则collatz()应打印数字// 2并返回此值.如果number是奇数,那么collatz()应该打印并返回3*number + 1.然后编写一个程序,让用户输入一个整数,并继续在该数字上调用collatz(),直到函数返回值1.
该程序的输出可能如下所示:输入数字:3 10 5 16 8 4 2 1
我试图在while循环中创建一个使用if和elif语句的函数.我希望打印数字,然后返回到循环的开头并使用collatz序列将其自身缩减为1,结果数字的每个实例在循环时打印.使用我当前的代码,我只能打印该数字的第一个实例,之后该数字不会通过循环.这是我的代码:
Enter number: 3 10 5 16 8 4 2 1
Run Code Online (Sandbox Code Playgroud)
Nun*_*cjo 20
def collatz(number):
if number % 2 == 0:
print(number // 2)
return number // 2
elif number % 2 == 1:
result = 3 * number + 1
print(result)
return result
n = input("Give me a number: ")
while n != 1:
n = collatz(int(n))
Run Code Online (Sandbox Code Playgroud)
输出:
Give me a number: 3
10
5
16
8
4
2
1
Give me a number: 11
34
17
52
26
13
40
20
10
5
16
8
4
2
1
Run Code Online (Sandbox Code Playgroud)
这是我想出的:
import sys
def collatz(number):
if number % 2 == 0: # Even number
result = number // 2
elif number % 2 == 1: # Odd number
result = 3 * number + 1
while result == 1: # It would not print the number 1 without this loop
print(result)
sys.exit() # So 1 is not printed forever.
while result != 1: # Goes through this loop until the condition in the previous one is True.
print(result)
number = result # This makes it so collatz() is called with the number it has previously evaluated down to.
return collatz(number)
print('Enter a number: ') # Program starts here!
try:
number = int(input()) # ERROR! if a text string or float is input.
collatz(number)
except ValueError:
print('You must enter an integer type.')
# Fully working!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44953 次 |
| 最近记录: |