如何使用范围和字符串格式在函数中打印分数?

时间:2016-01-29 18:52:29

标签: python python-3.x range string-formatting

  

编写一个具有一个整数参数的函数displayFractions()n。该函数将显示(不返回)1 / n,2 / n,3 / n,...,n / n的分数。该函数必须在range()循环和格式字符串中使用for函数才能正好显示3位小数。不必指定宽度,因此不需要该数字。值应打印在同一行上,每个值用逗号分隔后跟空格

以下是我所拥有的:

def displayFractions(n):
    for i in range(n, n+1):
        print('{:.3f}'.format(1/i, i/i), end=', ')

我知道我对range()format()有错误的论据,但我完全不知道该插入什么。我已经阅读并重新阅读了教科书,并查看了几十个例子,但无法弄清楚这一点。

3 个答案:

答案 0 :(得分:1)

由于有人已经修复了你的代码,我会给出一个在Python中使用其他一些整洁的东西的答案。

def displayFractions(n):
    print(', '.join( '{:.3f}'.format(i/n) for i in range(1, n+1) ))

str.join方法非常有助于在iterable中的项之间插入文本。例如:

>>> ', '.join(range(10))
'0, 1, 2, 3, 4, 5, 6, 7, 8, 9'

在我的函数中,生成器被传递给str.join方法。这样可以避免为分数创建中间列表。

答案 1 :(得分:0)

你快到了。您的字符串上只有一个占位符插槽,因此您只传入一个参数。你的range()应该从1开始(第一个参数):

def displayFractions(n):
    for i in range(1, n + 1):
        print('{:.3f}'.format(1/i), end=', ')

这会打印一个额外的逗号。你可以忽略循环中的最后一次迭代,只需在循环外添加一个额外的print()调用来打印最后一个分数:

def displayFractions(n):
    for i in range(1, n):
        print('{:.3f}'.format(1/i), end=', ')
    print('{:.3f}'.format(1/n))

答案 2 :(得分:0)

知道了!

def displayFractions(n):
    for i in range(1, n+1):
        print('{:.3f}'.format(i/n, i/i), end=', ') 

感谢大家的帮助。