0

月の日を表す2桁の整数を取得し、1桁の各文字を取得してそれらを足し合わせて新しい数値を形成することにより、桁を1桁に分割しようとしています。

たとえば、dayの値が整数29の場合、プログラムはそれを文字列に変換し、それらを「2」と「9」に分割します。次に、プログラムは2と9を整数に変換し、それらを合計して11に等しくします。これはまだ2桁の数値であるため、プログラムはループし、1と1が合計され、出力される最終値は2になります。以下のコード(ほとんどの場合、最後の5行)によると、day = 29と入力すると、最終的に得られる答えは4になりますが、これは正しくありません。誰かが私がこれを修正するのを手伝ってもらえますか?

誰かが私がdayStringSumを再入力しなかったと言って、誤って彼らの投稿を削除したことに注意してください。それが何を意味するのかまったくわかりません。

 dayString = str(int(day))
# Turns value day into int
dayStringA = int(str(dayString[0]))
# If day=29 then this variable represents the 2...
dayStringB = int(str(dayString[1]))
# ...and this represents the 9
dayStringSum = (dayStringA + dayStringA)
while(dayStringSum >=10):
    dayStringA = int(str(dayStringSum[0]))
# Since daystringsum is now 11, this code changes the value of daystringA into a new value of 1, likewise for below.
    dayStringB = int(str(dayStringSum[1]))

print(dayStringSum)
4

5 に答える 5

2

dayStringSumは整数なのでdayStringSum[n]、意味がありません。最初に文字列に変換してから、個々の文字を確認する必要があります。

また、ループ内でdayStringSumに新しい値を割り当てないwhileため、ループに入ったときに10以上の場合、その値はそのまま残り、無限ループになります。あなたはあなたが4の最終結果を得たと言います、しかし私はあなたがどのように最終結果を得るか全くわかりません。

次のようなものを試してください。

daySum = int(day)  # Ensure that day is an int before we start.

while(daySum >= 10):
    newString = str(daySum)
    dayIntA = int(newString[0])
    dayIntB = int(newString[1])
    daySum = dayIntA + dayIntB  # Will be checked on next iteration.

print(daySum)
于 2012-10-04T05:51:47.677 に答える
1

間違った答えが返ってきたのは、追加dayStringA + dayStringAするつもりだったときに追加したからだと思いますdayStringA + dayStringB。つまり、タイプミスです。

修正する必要があるもう1つのことは、ループ内では変更しないことdayStringSumです。例では10未満であるため、これはこれまでのところ問題ではありませんdayStringSum。したがって、ループは最初から実行されませんが、そのタイプミスを修正すると、無限ループが発生し、プログラムが停止することはありません。 。

これが私が意味することです:あなたの日がであると仮定してください29。この行に到達すると:

while(dayStringSum >=10):

次にdayStringSum11になります。したがって、dayStringA1に設定します。

    dayStringA= int(str(dayStringSum[0]))

そしてまたdayStringB1に。

    dayStringB= int(str(dayStringSum[1]))

これでループは終了です。したがって、Pythonは次の行に戻ります。

while(dayStringSum >=10):

なにdayStringSum?なぜ、まだ11です!あなたはそれを決して変えませんでした。そのため、Pythonはループを続け、同じロジックを何度も繰り返します。

それを超えて、このコードを必要以上に複雑にするものがたくさんあります。それらについては説明しませんが(コードレビューがその場所になります)、一般に、int既にsである場合は、物をsに変換する必要intはありません。同様にstr、すでに文字列である何か。

于 2012-10-04T06:08:27.620 に答える
0

試すsum(map(int,"265"))

それらをintにマップし、それらを合計します...

>>> sum(map(int,"254"))
11

また

>>> sum(map(int,str(29)))
11

宿題が出たので、答えを出すことはできません。

しかし

に似ています

sum1=0
for integer in [1,2,3]: sum1 += integer
print sum1
于 2012-10-04T05:58:42.567 に答える
0

より簡単な方法は、数値のモジュラス9を取ることです

>>> print(29%9)
2
于 2012-10-04T07:46:03.413 に答える
0
day = 29

while day >= 10:
    day = sum(int(digit) for digit in str(day))

(また、整数の個々の桁の主要な操作を行うときはいつでも、特にあなたに与えるdecimal.Decimalその方法は便利 です)。Decimal(29).as_tuple().digits(2, 9)

于 2018-04-06T21:38:36.113 に答える