Q)编写一个名为collatz()的函数,该函数有一个名为number的参数。如果数字是偶数,则collatz()应打印数字// 2并返回此值。如果一个数字是奇数,那么collatz()应该打印并返回3 *数字+ 1.然后编写一个程序,让用户输入一个整数并保持调用 对该数字进行collatz(),直到函数返回值为止。
这是我为上述问题编写的代码,但我需要一些关于如何使用while循环的小帮助,所以当我得到一个ValueError而不是破坏程序时我希望程序重新执行程序而不是而不仅仅是显示print语句。
try:
def collatz(number):
if number % 2 == 0:
print(number // 2)
return number // 2
elif number % 2 == 1:
print(3 * number + 1)
return 3 * number + 1
x = int(input("Enter a number: "))
while x != 1:
x = collatz(x)
except ValueError:
print("Please enter a numerical value")
答案 0 :(得分:1)
您可以修改 HandlingExceptions - Python Wiki :
中的代码def collatz(number):
if number % 2 == 0:
print(number // 2)
return number // 2
elif number % 2 == 1:
print(3 * number + 1)
return 3 * number + 1
has_input_int_number = False
while has_input_int_number == False:
try: # try to convert user input into a int number
x = int(input("Enter a number: "))
has_input_int_number = True # will only reach this line if the user inputted a int
while x != 1:
x = collatz(x)
except ValueError: # if it gives a ValueError
print("Error: Please enter a numerical int value.")
使用示例:
Enter a number: a
Error: Please enter a numerical int value.
Enter a number: 1.5
Error: Please enter a numerical int value.
Enter a number: 5
16
8
4
2
1
答案 1 :(得分:0)
def collatz(number):
if number % 2 == 0:
print(number // 2)
return number // 2
elif number % 2 == 1:
print(3 * number + 1)
return 3 * number + 1
x = int(input("Enter a number: "))
while x != 1:
try:
x = collatz(x)
except ValueError:
print("Please enter a numerical value")
答案 2 :(得分:0)
如果没有分层,请使用while True
和break
。
def collatz(x):
x= x//2 if x%2==0 else x*3+1
print(x)
return x
def func(x):
while True:
x = collatz(x)
if x==1:
break
def run():
while True:
try:
x = int(input("Input a positive number: "))
assert x>0
func(x)
break
except Exception as exc:
#print("Exception: {}".format(exc))
pass
if __name__ == "__main__":
run()