我写了一个函数。我想要做的是将一个四位数字传递给这个函数,该函数将生成另一个四位数字,当添加到调用该函数的数字时,每个数字加到它上面将加起来为9。但是如果主叫号码中的数字是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))
答案 0 :(得分:3)
0011
是11
。前导零被丢弃,因此如果要保留它们,请返回一个字符串:
return "".join(str(x) for x in make_num_nine)
答案 1 :(得分: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: ') ) ) )
输出周围没有引号,因为这些似乎让你烦恼。
答案 2 :(得分: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))
答案 3 :(得分:1)
问题是你将它作为int返回。如果你有前导0,它们将不包括在内。如果要将返回值打印为4位数字,可以使用the string format function,如下所示:
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)
当然,根据您的应用程序,将函数的输出保留为字符串可能是有意义的。