我创建了一个程序,输出打印为例如36, 6, 2, 1
。
我希望它能打印[36, 6, 2, 1]
。
这是我目前的代码:
def collatz(n):
print(n, end = ', ')
while (n > 1):
if n % 2 == 0:
n=int(n**0.5)
else:
n=int(n**1.5)
if n == 1:
print(1)
else:
print(n, end = ', ')
我不知道在这一点上要编辑什么,因为我已经尝试了很多混乱的打印语句,我在其他帖子中看到使用print(*n, ...)
但是我收到了错误:
TypeError: print() argument after * must be a sequence, not int.
我明白为什么它不起作用所以我在这一点上迷失了。
答案 0 :(得分:2)
要控制其打印方式,只需单独打印[
和]
即可。不要混淆打印的方式存储的方式或者它的数据类型。
def collatz(n):
print('[{}'.format(n), end=', ')
while (n > 1):
if n % 2 == 0:
n=int(n**0.5)
else:
n=int(n**1.5)
if n == 1:
print(1, end=', ')
else:
print(n, end = ', ')
print(']', end='')
答案 1 :(得分:1)
最好的方法是创建一个列表并将n
的值附加到列表中。通过这种方式,您可以利用str(list)
的内置功能,在打印时自动将[
和]
添加到结尾。
示例代码可以是
def collatz(n):
templist = [n]
while (n > 1):
if n % 2 == 0:
n=int(n**0.5)
else:
n=int(n**1.5)
if n == 1:
templist.append(1)
else:
templist.append(n)
print(templist)
现在,当您运行collatz(36)
时,您会获得[36, 6, 2, 1]
答案 2 :(得分:1)
从
中删除if
条件,您可以大大简化您的功能
if n % 2 == 0:
n=int(n**0.5)
else:
n=int(n**1.5)
与:n % 2 + 0.5
并且还使用递归而不是迭代。因此,您的collatz
函数可以简单地实现:
def collatz(n):
if n <= 1:
return [1]
return [n] + collatz(int(n ** (n % 2 + 0.5)))
collatz(n)
现在将返回一个很好的数组,如果函数只有一个责任,它会更好。现在,您可以将其包装在一个函数中,该函数以类似Python的格式打印数组:
def print_collatz(n):
return str(collatz(n))
所以你可以简单地打电话:
print_collatz(36)
# [36, 6, 2, 1]
返回数组格式的字符串:
答案 3 :(得分:-1)
您可以创建一个列表并打印其字符串表示形式:
def collatz(n):
my_list = []
my_list.append(n)
while (n > 1):
if n % 2 == 0:
n=int(n**0.5)
else:
n=int(n**1.5)
if n == 1:
my_list.append(1)
else:
my_list.append(n)
print(str(my_list))