0

我正在尝试采用两位数的整数来表示月份中的某天,通过将单个数字中的每个字符并将它们加在一起以形成一个新数字,将这些数字拆分为个位数。

例如,如果 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)
4

5 回答 5

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)
于 2012-10-04T05:51:47.677 回答
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 将继续循环,一遍又一遍地执行相同的逻辑。

现在除此之外,还有很多事情使这段代码变得比它需要的复杂得多我不打算通过它们(代码审查将是那个地方),但一般来说,int如果它们已经int是 s,你不需要将它们转换为 s,同样你不需要使用stron已经是字符串的东西。

于 2012-10-04T06:08:27.620 回答
0

更简单的方法是取数的模数 9

>>> print(29%9)
2
于 2012-10-04T07:46:03.413 回答
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
于 2012-10-04T05:58:42.567 回答
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 回答