我试图采用代表日期的两位数整数,通过将每个字符放在一位数并将它们加在一起形成一个新数字,将数字分成单个数字。
e.g。如果day的值是整数29,那么程序会将其转换为字符串并将它们分成'2'和'9'。然后程序将2和9转换成整数并将它们加在一起等于11.由于这仍然是一个双位数字,程序将循环,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)
答案 0 :(得分:2)
dayStringSum
是一个整数,因此dayStringSum[n]
毫无意义。你首先想把它变成一个字符串,然后看看它的各个字符。
另外,你没有在while
循环中为dayStringSum分配一个新值,所以如果在进入循环时它是> = 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)
答案 1 :(得分:1)
我猜测你得到错误答案的原因是当你想添加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 Review就是这个地方),但一般情况下,如果已经将事物转换为int
,则不需要将它们转换为int
str
s,同样地,您不需要在已经是字符串的内容上使用{{1}}。
答案 2 :(得分:0)
尝试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
答案 3 :(得分:0)
更简单的方法是采用数字模数9
>>> print(29%9)
2
答案 4 :(得分:0)
day = 29
while day >= 10:
day = sum(int(digit) for digit in str(day))
(另外,每当你对整数的各个数字进行主要操作时,decimal.Decimal
都很有用,特别是它的方法
Decimal(29).as_tuple().digits
,它会为您提供(2, 9)
)。