2014-01-15 45 views
1

我试着去得到一个Python 2本书实乃蟒蛇工作3的Python 3 print()函数

1 def printMultiples(n): 
2 i = 1 
3 while i <= 6: 
4  print(n*i, '/t',) 
5  i = i + 1 
6 print() 

我的问题是第5行。我的理解是在python2打印是一个声明,而不是一个函数。只是添加括号不起作用。它只是不识别字符串'/ w'。我只是无法弄清楚如何在一个函数中完成这项工作。我尝试使用str(n * i)将整数转换为字符串,但是抛出了一个错误。

我知道你的python家伙知道我想要什么以及如何去做。

+0

作为一个方面说明,你的整个循环过于复杂。如果你想循环遍历从1到6的数字,只需要在范围(1,7)中为'i':'。无需将其预先初始化为起始值,根据最终值对其进行检查,然后手动增加它(这会为您提供三个独立的位置,在这些位置愚蠢的错字可能会导致难以追踪的错误,而不仅仅是一)。 – abarnert

+1

我认为这是来自一本介绍书和温柔的方法,在深入研究pythonic的做事方式之前先弄清楚基础知识。 虽然你的一个班轮的例子是一个很好的例子,它可以在Python中完成,但对于学习语言的程序员或者编程的新手来说,可能有点难以消化。 – Tim

回答

4

我假设你要打印一个制表符分隔值列表,更改代码在Python 3使用工作如下功能:

def printMultiples(n): 
    i = 1 
    while i <= 6: 
     print(n*i, end='\t') 
     i = i + 1 
    print() 

在Python 3 print语句具有以下特征:

print(*args, sep=' ', end='\n', file=None) 

在Python 3相似的变化换行符年底把一个逗号在Python之前的版本的打印语句的结尾是使用end关键字。

+0

值得注意的是,虽然打印函数的工作方式可能最初看起来比Python 2更麻烦,但这意味着整个函数可以使用列表理解和单个打印语句来编写:printMultiples = lambda n:print( * [n * i在范围内(1,7)],sep ='\ t')' – cge

+0

@cge这是一个很好的观点,在这种情况下使用列表解析(或生成器表达式)会缩小方法直到一个班轮真正展示了python结构的力量。 对于一个刚接触python的人来说,我认为更详细的版本会让它更清晰一些。 – Tim

+0

在Python 2.x中,他打印了两个值:'n * i'和''\ t'',没有结尾(或者说是魔术空间的结尾)。你的Python 3.x代码打印出一个值'n * i',用'\ t''作为结尾。更直接的翻译将是'print(n * i,'\ t',end ='')'。当然,这完全是同一件事,而且时间更长,所以我并不是建议你改变你的代码,只是说它可能值得解释不同之处(尤其是因为你的答案已经成为使用'end'参数的方式)。 – abarnert

0

我不知道你从最后一行print()

def printMultiples(n): 
    for i in range(1,7): 
     print(n*i, '\t') 

想这是什么工作的吗?