2

私の元の python プログラムは、文字列補間を使用して、ユーザーが 2928 のように 0 から 9999 の間で入力した数値を取得し、個々の数字 (2+9+2+8=21) を合計してから、最終的に 1 桁になるまで数値を分割しました。画面に表示された番号 (この場合は 3)。コードは次のようになります。

今、文字列補間を使用せずに同じことを行う方法を見つける必要があります(整数を文字列に変換してから、文字列を分割し、整数に再変換して合計します)。私はPythonにかなり慣れていないため、非常に単純なコマンドを使用できます(最も複雑なのはwhileループです)。

*ps, yearint-year が何であるかについてはあいまいさが存在すると思います。「年」は上に書いていないコマンドですが、そのコードはユーザーに0〜9999の数字を入力させます。私はPythonを初めて使用し、振り返ったときに覚えられるようにわかりやすいものにしたいので、変数名を「yearint」に変更しました。SO 基本的に year/yearint はユーザー入力の入力です。

4

4 に答える 4

6

モジュラスを 9 として、9 の倍数を考慮して微調整します。

>>> (123 - 1) % 9 + 1
6
于 2012-10-16T03:21:08.373 に答える
1
def sumnum(num):
    if num < 10:
        return num
    return sumnum((num % 10) + sumnum(num/10))

sumnum(1234)

再帰だから。それが理由です。

于 2012-11-08T02:49:45.003 に答える
0

Python では、文字列値をループして、文字列から連続する文字を取得できます。

 for ch in "1234":
    print (ch) 

したがって、文字列の数字の値を合計する最良の方法は次のとおりです。

sum(int(ch) for ch in s)

ここでは、一度に 1 文字を取得して整数値に変換する「ジェネレータ式」で sum() 関数を呼び出します。このようにすると、文字列の長さは関係ないことに注意してください。

于 2012-10-16T03:24:30.727 に答える
0

これは携帯電話で入力しているので、「 yearString 」の代わりに「 y 」を使用します。

if len(y) == 4:
    x = int(y[3]) + int([2]) + int(y[1]) + int([0])
    y = str(x)

if len(y) == 3:
    x = int([2]) + int(y[1]) + int([0])
    y = str(x)

if len(y) == 2:
    x = int(y[1]) + int([0])
    y = str(x) 

answer = int(y) 

合計が複数の桁の場合、後の if ステートメントでそれを処理する方法を確認してください。それでは、純粋な数学を使用して同様のコードを書きましょう。

x = int(yearString) 

d3 = x // 1000
x %= 1000

d2 = x // 100
x %= 100

d1 = x // 10
d0 = x % 10

answer = d3 + d2 + d1 + d0

編集:考えてみたところ、これを行うための最良の方法がわかると思います。このための完全なコードは書きません。

モジュラス演算子を 10 で使用すると、一番下の桁が引き出されます。次に、10 による整数除算を使用する場合は、下の桁を削除します。これを while ループで実行し、すべての数字がなくなるまで繰り返します。最後の 10 で除算した後、数値はゼロになります。これを行う関数を作成し、合計が 10 未満 (1 桁になる) になるまで while ループから呼び出します。

編集:さて、私は完全なコードを書いたほうがいいと思います:

y = int(yearString)
x = 0  # we will accumulate the sum in x
while y != 0:
    x += y % 10  # add one digit
    y //= 10  # discard one digit
    if y == 0 and x > 10:
        # We have pulled out all the digits from y, but x has
        # multiple digits.  Start over so we can sum the digits
        # from x.
        y = x
        x = 0

answer = x
于 2012-10-16T04:07:20.580 に答える