2

我现在已经在论坛上搜索了一点,我仍然很困惑。如果有人可以指导我阅读更深入地解释这一点的文章,我将不胜感激。我正在介绍 python 课程,并找到了解决问题的方法,但我想知道它是如何工作的。任务是返回一名球员的击球率,并按照 MLB 的显示方式显示。因此,例如 8 次击球中的 4 次安打将是 0.500。这是我发现有效的代码。

from __future__ import division, print_function

def print_batting_average(at_bats, hits):
    average_str = "%.3f" % (hits / at_bats)
    if average_str.startswith("0"):
        average_str = average_str[1:]
    print("Batting average is", average_str)

print_batting_average(4, 2)

我知道 % 是模数并给出了余数。我只是不明白它如何适合代码的其他部分。例如“%.3f”。我也看到了 % 以不同的方式使用,我只是想找到一个好的解释。希望我不会因为提出这个问题而受到抨击。谢谢你的帮助。

4

5 回答 5

4

在您询问的上下文中,%用于帮助格式化输出,与任何 mod 操作无关。

例如,%3d,%.2f都是格式化输出的不同方式。第一个示例意味着您要显示一个整数并为其保留 3 个空格。第二个表示您要显示浮点类型值,小数点后有 2 个数字。

String Formatting Operations有关各种格式类型和选项的更多信息和详细信息, 请参阅http://docs.python.org/library/stdtypes.html#string-formatting-operations

你可能会遇到这样的事情:

number_of_Widgets = 5
cost = 66.8788
print 'Total cost for %d widgets is $ %5.2f.' % (number_of_Widgets, cost)

产量:

Total cost for 5 widgets is $ 66.88.

' ' 中包含的部分使用格式化指令作为行尾提供的实际变量值的占位符。这些值以 % 开头,然后 () 包含提供这些值的变量。

这是一个简单的示例,说明为什么格式字符串可以方便地格式化输出:

这里我们没有为数字保留和额外的空间,你可以看到它在达到 10 时移动输出。

In [9]: for i in xrange(5,15):
   ...:     print '%d is the number' % i
   ...:
5 is the number
6 is the number
7 is the number
8 is the number
9 is the number
10 is the number
11 is the number
12 is the number
13 is the number
14 is the number

在这里,我们用两个空格格式化数字,并为单个数字获取前导空格。

In [10]: for i in xrange(5,15):
   ....:     print '%2d is the number' % i
   ....:
 5 is the number
 6 is the number
 7 is the number
 8 is the number
 9 is the number
10 is the number
11 is the number
12 is the number
13 is the number
14 is the number
于 2012-04-26T17:03:48.957 回答
3

算术表达式中的%是指模数。

像 "%.3f" 这样的文字字符串中的 % 只是一个普通字符;它与模数无关。

但是当您将它们与 % 运算符一起使用时,其中带有 % 符号的字符串是特殊的。在这种情况下,左边的值是一个字符串,所以模数的含义不适用;相反,你会得到格式化。字符串中的 %-sequences 是占位符,被元组中的值替换,根据字符串中每个 '%' 之后的内容进行格式化。例如,“%.3f”表示“小数点后三位的浮点值”。

有关格式规范的详细信息,请参见http://docs.python.org/library/stdtypes.html#string-formattingprintf它与C 中的函数族大致相同。

于 2012-04-26T17:05:06.257 回答
1

在:

"%.3f" % (hits / at_bats)

百分号以两种不同的方式使用,这两种方式都与模运算符无关。

具体来说:

于 2012-04-26T17:04:54.847 回答
0

看看这个http://docs.python.org/release/2.6/library/string.html

“格式规范”在格式字符串中包含的替换字段中使用,以定义如何呈现单个值(请参阅格式字符串语法。)它们也可以直接传递给内置的 format() 函数。每个可格式化的类型都可以定义如何解释格式规范。

Python中的模函数只是mod(p,q)

于 2012-04-26T17:04:04.073 回答
0

%用于格式化字符串的 与模运算符不同。注意它是如何在引号内的。

%对于字符串格式化是许多编程语言的标准和约定 - http://en.wikipedia.org/wiki/Printf_format_string

于 2012-04-26T17:04:54.240 回答