2

関数を書きました。私がやりたいことは、この関数に 4 桁の数字を渡すことです。関数は別の 4 桁の数字を生成し、関数を呼び出した数字に追加すると、各数字が追加されて 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))
4

4 に答える 4

3

0011 is 11. Leading zeroes are discarded, so if you want to preserve them, return a string:

return "".join(str(x) for x in make_num_nine)
于 2013-07-26T05:05:58.737 に答える
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 に答える
1

関数が値 11 ではなく文字列 '0011' を返すようにする場合は、最後の行の 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

Your last line returns an int.

This will remove leading zeroes, as they are non-significant.

Try return ''.join(str(x) for x in make_num_nine). That should do it.

Edit:

If you really, really, really want Python to write out the '0011' without the quotes, try this:

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