Разделите целые числа дня месяца на цифры, суммируйте их многократно, пока не получите однозначное целое число
Я пытаюсь взять двузначные целые числа, обозначающие день месяца, разделить цифры на одну цифру, взяв каждый символ в одну цифру и сложив их вместе, чтобы сформировать новое число.
Например, если значение для дня было целым числом 29, то программа превратит это в строки и разделит их на "2" и "9". Затем программа превратила бы 2 и 9 в целые числа и сложила бы их вместе, чтобы они равнялись 11. Так как это все еще двузначное число, программа зациклилась бы, и 1 и 1 были бы сложены вместе, и окончательное значение, которое должно было бы вывести, было бы 2. Согласно приведенному ниже коду (в основном последние ~5 строк), если я введу день =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)
5 ответов
dayStringSum
целое число, так dayStringSum[n]
не имеет смысла. Сначала вы захотите превратить его в строку, а затем посмотреть на отдельные символы.
Кроме того, вы не назначаете новое значение для dayStringSum внутри while
loop, так что если при входе в цикл>= 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)
Я предполагаю, что причина, по которой вы получаете неправильный ответ, заключается в том, что вы добавляете dayStringA + dayStringA
когда ты хотел добавить dayStringA + dayStringB
это просто опечатка.
Другое, что вам нужно исправить, это то, что в цикле вы не меняете dayStringSum
, До сих пор это не было проблемой, потому что dayStringSum
в вашем примере меньше 10, поэтому цикл никогда не выполняется, но как только вы исправите эту опечатку, вы получите бесконечный цикл, и программа никогда не остановится.
Вот что я имею в виду: предположим, ваш день 29
, Когда вы доберетесь до этой строки:
while(dayStringSum >=10):
затем dayStringSum
будет 11. Итак, вы установили dayStringA
до 1,
dayStringA= int(str(dayStringSum[0]))
а также dayStringB
до 1.
dayStringB= int(str(dayStringSum[1]))
Тогда это конец цикла. Итак, Python возвращается к этой строке:
while(dayStringSum >=10):
какой dayStringSum
? Почему это все еще 11! Вы никогда не меняли это. Таким образом, Python будет продолжать цикл, повторяя одну и ту же логику снова и снова.
Помимо этого, есть множество вещей, которые делают этот код более сложным, чем он должен быть. Я не собираюсь проходить через них ( Code Code было бы местом для этого), но в целом вам не нужно преобразовывать вещи в int
с, если они уже int
s, а также вам не нужно использовать str
на то, что уже является строкой.
day = 29
while day >= 10:
day = sum(int(digit) for digit in str(day))
(Кроме того, всякий раз, когда вы делаете основные манипуляции с отдельными цифрами целого числа, decimal.Decimal
полезен, в частности, его методDecimal(29).as_tuple().digits
что дает вам (2, 9)
).
Пытаться sum(map(int,"265"))
который отображает их в целые числа и суммирует их...
>>> sum(map(int,"254"))
11
или же
>>> sum(map(int,str(29)))
11
о хорошо, так как его домашнее задание я не могу просто дать ответ....
но
это похоже на
sum1=0
for integer in [1,2,3]: sum1 += integer
print sum1