在Python中格式化表格中的未知输出

问题描述 投票:0回答:1

帮助!我是一名Python初学者,已完成从用户输入的整数显示Collat​​z序列,并在列和行中显示内容的任务。您可能知道,结果可能是10个数字,30个或100。我应该使用'\ t'。我尝试了许多变体,但充其量只能得到一栏。例如

def sequence(number):
    if number % 2 == 0:
        return number // 2    
    else:
        result = number * 3 + 1
        return result


n = int(input('Enter any positive integer to see Collatz Sequence:\n'))
while sequence != 1:
    n = sequence(int(n))
    print('%s\t' % n)
    if n == 1:
        print('\nThank you! The number 1 is the end of the Collatz Sequence')
        break

将产生单个垂直列,而不是水平显示结果。理想情况下,我想从左到右显示10个结果,然后转到另一行。感谢您的任何想法!

python output
1个回答
1
投票

可能是这样:

def get_collatz(n):
    return [n // 2, n * 3 + 1][n % 2]

while True:
    user_input = input("Enter a positive integer: ")
    try:
        n = int(user_input)
        assert n > 1
    except (ValueError, AssertionError):
        continue
    else:
        break

sequence = [n]
while True:
    last_item = sequence[-1]
    if last_item == 1:
        break
    sequence.append(get_collatz(last_item))

print(*sequence, sep="\t")

输出:

Enter a positive integer: 12
12  6   3   10  5   16  8   4   2   1
>>> 

EDIT尝试使其与您的代码相似:

我会将您的sequence函数更改为这样的内容:

def get_collatz(n):
    if n % 2 == 0:
        return n // 2
    return n * 3 + 1

我之所以称它为get_collatz,是因为我认为它比sequence更具有描述性,但它仍然不是一个好名字-如果您想get_collatz_at_n或诸如此类的字眼,可以很明确。

注意,由于不需要,我完全将else分支取出。如果为n % 2 == 0,则我们从函数中返回,因此您可以在if的正文中返回,也可以在下面返回一行-无需else

对于其余的,也许:

last_number = int(input("Enter a positive integer: "))
while last_number != 1:
    print(last_number, end="\t")
    last_number = get_collatz(last_number)

在Python中,print有一个名为end的可选关键字参数,默认情况下为\n。它表示在打印语句的最后应该打印哪个字符。只需将其更改为\t,就可以在一行上打印所有序列元素,并用制表符分隔(因为序列中的每个数字都调用单独的打印语句)。

但是,使用这种方法,您必须确保在1循环结束后打印尾随的while,因为一旦last_number变为1,循环就会终止。循环将没有机会打印它。

打印序列的另一种方法(带有分隔标签)是将序列存储在列表中,然后使用str.join从列表中创建一个字符串,其中每个元素由某个字符串或字符分隔。当然,这需要列表中的所有元素都以字符串开头-在这种情况下,我使用map将整数转换为字符串:

result = "\t".join(map(str, [12, 6, 3, 10, 5, 16, 8, 4, 2, 1]))
print(result)

输出:

12  6   3   10  5   16  8   4   2   1
>>> 
© www.soinside.com 2019 - 2024. All rights reserved.