end=' '在print函数中的作用是什么?

7

我很难理解这个练习:

def a(n):
    for i in range(n):
        for j in range(n):
            if i == 0 or i == n-1 or j == 0 or j == n-1:
                print('*',end='')
            else:
                print(' ',end='')
        print()

打印一个空方块。我以为我可以使用这段代码。
print("*", ''*(n-2),"*")

打印出在正方形的上下两侧之间的单位,但它们不会与上/下侧的单位对齐,如果运行第一个代码则不会发生这种情况。
所以,这可能是因为end=''print()吗?
请您告诉我它们的含义好吗?

这些是命名或关键字参数:http://docs.python.org/release/1.5.1p1/tut/keywordArgs.html - PeterMmm
1
可能是重复问题:https://dev59.com/U3E95IYBdhLWcg3wGqEH - Nilani Algiriyage
@NilaniAlgiriyage 我也看到了那个问题,但我不认为它是重复的。你找到的那个问题主要讨论了Python2Python3之间的区别,因为在Python2print没有end参数(实际上,在Python2中,print不是一个函数而是一个语句)。而这个OP想知道end是什么意思。 - starrify
6个回答

10

请查看print参考页面。默认情况下,将换行符附加到要打印的项(end='\n'),使用end=''可使其打印在同一行上。

print()会打印一个空的换行符,这是保持在下一行继续打印所必需的。

已编辑:添加了一个示例。
实际上,您也可以使用以下内容:

def a(n):
    print('*' * n)
    for i in range(n - 2):
        print('*' + ' ' * (n - 2) + '*')
    if n > 1:
        print('*' * n) 

或者,在一次 print 调用中:print( '*' * n + '\n' + ( '*' + ' '*(n-2) + '*\n' )*(n-2) + '*'*n ) - Robᵩ
@Robᵩ 当然有很多方法可以简写代码,但这不像IOCCC那样,源代码的目的是为了让人们阅读。我看不出来写成那样有什么好处。另外,你确定你提供的是一个_正确_的例子吗?你可以尝试n=1 - starrify

1
在Python 3.x中,end=' '用于在显示的字符串后放置一个空格,而不是换行符。
请参考this以获取更详细的解释。

请给我答案,不要让我等待。请在注释中提供一些指导。 - I am the Most Stupid Person

0

使用这个来理解

for i in range(0,52):
    print(5*"fiof" ,end=" ")

只需在结尾处放置不同的内容,并使用分隔符即可


0
spam = ['apples', 'bananas', 'tofu', 'cats']
    i = 0
    for i in range(len (spam)):
        if i == len(spam) -1:
            print ('and', spam[i])
        elif i == len (spam) -2:
            print (spam [i], end=' ')
        else:
            print (spam [i], end=', ')

所以我对编码完全不了解,但是我想出了这段代码。它可能没有其他代码那么复杂,但它完成了工作。

spam = ['apples', 'bananas', 'tofu', 'cats']    
def fruits():
    i = 0
    while i != len(spam):
        if len(spam) != i :
            print ('and', spam[i])
            i += 1   
 fruits()  

试试这个!


0

print()在有多个参数时使用一些分隔符。在您的代码中,您有3个参数(“”是第一个,“''(n-2)”是第二个,“*”是第三个)。如果您不想在它们之间使用分隔符,请添加sep=''作为关键字参数。

print("*", ' '*(n-2), "*", sep='') 

-2
print('\n'.join('*{}*'.format((' ' if 0<row<n-1 else '*')*n-2) for row in range(n)))

如果你能够编写不需要测试的代码,那当然是很好的 -- 只要它们是正确的。但是在这种情况下,不是这样的。目前你的答案有两个语法错误需要修复,还有一个 bug,即你的代码不能处理 n==1 的情况。 - starrify

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接