for (i = 0; number > 0; i++)
{
if (i % 2 == 0)
{
total = total + number % 10;
number /= 10;
}
}
我需要用python写这个。我试着把它们分成两个回路,while
和for
。
while number > 0:
for i in range(infinite):
但是我不知道如何在python中运行无限for
循环。
我认为这可能是解决方案:有没有更好的方法?
i = 0
while number > 0:
i += 1
if i % 2 == 0։
total = total + number % 10
number /= 10
这是整个代码
long number = get_long("Number: ");
int total = 0;
int first2 = 0;
int i = 0;
for (i = 0; number > 0; i++)
{
if (i % 2 == 0)
{
total = total + number % 10;
number /= 10;
}
else
{
if (number % 10 < 5)
{
total = total + 2 * (number % 10);
number /= 10;
}
else
{
total = total + 1 + (2 * number) % 10;
number /= 10;
}
}
if (number >= 10 && number < 100)
{
first2 = number;
}
}
if (total % 10 == 0)
{
if ((first2 == 34 || first2 == 37) && i == 15)
{
printf("An");
}
else if ((first2 == 51 || first2 == 52 || first2 == 53 || first2 == 54 || first2 == 55) && i == 16)
{
printf("Mn");
}
else if (first2 / 10 == 4 && (i == 16 || i == 13))
{
printf("Vn");
}
else
{
printf("INVALIDn");
}
}
else
{
printf("INVALIDn");
}
Python中与C/Java代码最接近的等价代码是:
total = 0
i = 0
while number > 0:
if i % 2 == 0:
total += number % 10
number //= 10
i += 1
这不是很优雅,因为您必须重写for (...;...;...)
循环,使用while
和单独的行进行初始化和增量。请注意,他的与您所拥有的接近,但是有两个重要的区别:首先,i += 1
应该位于循环的末尾,因为for
的第三个块也在每次迭代之后执行。还要注意Python中整数除法的//
!
这只是计算所有数字的和。i % 2
部分是无关的,因为number //= 10
位只在该块内执行,所以它只是使外部循环运行两倍的时间。如果这确实是您想要的,您可以将其简化为这样,不使用i
:
while number > 0:
total += number % 10
number //= 10
或者就这样:
total = sum(map(int, str(number)))
然而,如果你想要添加每一个其他数字(从末尾开始),例如123456
的6+4+2
,那么你必须将/= 10
部分移动到外部循环(在包括i
的第一个版本中),即减少Python中的缩进。其余部分保持不变
我不清楚你到底想用这段代码实现什么,但看看你给出的C代码,我相信带有' I '变量的行是无用的:你循环了一定次数,但一半的时间你什么都不做;不如循环一半的次数。
对应的python代码是:
# number should be initialized to some value
total = 0
while number > 0:
total += number % 10
number //= 10
所以除了变量i,你已经有了最好的答案。