0

我正在尝试编写用于进行数字/版本填充的代码,但是当我尝试通过互联网搜索时,我只能找到一个 MEL 示例,它可以在其中工作,但对我来说没有意义(很可能我不明白它是如何工作的)

$padding = 3;
$num = 5;
string $pad = `python ("'%0"+$padding+"d' % "+$num)`;
// Results is: 005

但是,当我尝试将其转换为 Python 样式时,得到以下结果:

padding = '3'
num = '5'
pad = ("%0"+padding+"d' % "+num)
Result is: %03d' % 5

甚至当我试图重新排列代码时,结果要么是错误的(完全错误,如您所见),要么是 Maya 错误,例如TypeError: cannot concatenate 'str' and 'int' objects

任何指针?

4

1 回答 1

1
padding = '3'
num = '5'
pad = ("%%0%si" % padding) % int(num)
print pad # prints '005'

这是如何工作的:

您在字符串处理后使用 %% 将 %% 转义为 %::

In [17]: step1 = ("%%0%si" % padding)

In [18]: step1
Out[18]: '%03i'

In [19]: step2 = step1 % int(num)

In [20]: step2
Out[20]: '005'

这是如何工作的:(第二次尝试;))

当我们进行字符串处理时,“%”具有特殊含义

"%s" Replaced with a string
"%i" Replaced with an integer
"%%" means I am an "%", kinda like \n is newline and \\ is \

%x 可以通过在

"%10s" means a string padded to 10 with spaces
"%010i" means an integer padded to 10 with zeros

我们想要的是整数一个,因为数字零部分必须来自一个变量,我们必须做两个字符串处理步骤,因此我们在第一轮字符串处理中使用 %%->% 技巧得到 % 03i'

这里我使用括号将东西逻辑地组合在一起,实际代码中当然没有括号:)

"(%%)0(%s)i" % num

%% => %
"%s" % num => '3'

(%)0(3)i
%03i
于 2014-03-24T10:39:25.533 回答