将星期几的整数分成数字,重复求它直到得到一位数的整数

时间:2012-10-04 05:47:25

标签: python string integer digits dayofmonth

我试图采用代表日期的两位数整数,通过将每个字符放在一位数并将它们加在一起形成一个新数字,将数字分成单个数字。

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)

5 个答案:

答案 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))。