2

我写了一个函数。我想要做的是向这个函数传递一个四位数字,该函数将生成另一个四位数字,当添加到调用该函数的数字时,添加到它的每个数字将加起来为九。但是,如果主叫号码中的数字是 9,我的函数只能添加一个零,但在打印时,零只是一个空格。例如,如果主叫号码是 9988,我希望我的函数返回 0011,但它实际上返回 11

这是功能:

def make_nine(user_num):
    '''generates a number that when added to the users number sums up to 9'''

    make_num_nine = []
    for num in str(user_num):
        num = 9 - int(num)
        make_num_nine.append(num)
    return int("".join(str(x) for x in make_num_nine))
4

4 回答 4

3

001111。前导零被丢弃,因此如果要保留它们,请返回一个字符串:

return "".join(str(x) for x in make_num_nine)
于 2013-07-26T05:05:58.737 回答
1

如果您希望函数返回字符串 '0011' 而不是值 11,请省略最后一行中的 int()。

或者,如果要打印带前导零的整数,请使用'{:04}'.format (i).

实现您的功能的一种更简单的方法是:

def make_nine(user_num): return '{:04}'.format (9999 - user_num)

因此,具有用户输入、计算和输出的程序可以写成:

print ('{:04}'.format (9999 - int (input ('Your number: ') ) ) )

并且输出周围没有引号,因为那些似乎让你烦恼。

于 2013-07-26T05:05:36.267 回答
1

您的最后一行返回一个 int。

这将删除前导零,因为它们不重要。

试试return ''.join(str(x) for x in make_num_nine)。那应该这样做。

编辑:

如果你真的,真的,真的想让 Python 写出不带引号的 '0011',试试这个:

with open('output.txt', 'w') as w:
    w.write(make_nine(9988))
于 2013-07-26T05:05:58.267 回答
1

问题是您将它作为 int 返回。如果您有前导 0,它们将不包括在内。如果要将返回值打印为 4 位数字,可以使用字符串格式函数,如下所示:

input = 9988
output = make_nine(input)
print "{0:0>4}".format(output)

如果要将其推广到 n 位输入,可以执行以下操作(格式字符串中的格式说明符,以指定宽度):

input = 9988
output= make_nine(input)
print "{1:0>{0}}".format(len(str(input)), output)

当然,将函数的输出保留为字符串可能是有意义的,具体取决于您的应用程序。

于 2013-07-26T05:09:52.560 回答