如何用Python编写这个C for循环最好的解决方案是什么?
我需要用python编写这个。 我试图将它们分成两个循环如何用Python编写这个C for循环最好的解决方案是什么?,python,loops,for-loop,Python,Loops,For Loop,我需要用python编写这个。 我试图将它们分成两个循环,而和用于 for (i = 0; number > 0; i++) { if (i % 2 == 0) { total = total + number % 10; number /= 10; } } 但我不知道如何在python中为循环运行无限 以下是我认为可能的解决办法:有没有更好的办法 while number > 0: for i in range(in
,而和用于
for (i = 0; number > 0; i++)
{
if (i % 2 == 0)
{
total = total + number % 10;
number /= 10;
}
}
但我不知道如何在python中为
循环运行无限
以下是我认为可能的解决办法:有没有更好的办法
while number > 0:
for i in range(infinite):
这就是全部代码
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;
对于(i=0;数字>0;i++)
{
如果(i%2==0)
{
总数=总数+数量%10;
数目/=10;
}
其他的
{
如果(数字%10<5)
{
总数=总数+2*(数字%10);
数目/=10;
}
其他的
{
总数=总数+1+(2*个)%10;
数目/=10;
}
}
如果(编号>=10&&number<100)
{
first2=数字;
}
}
如果(总计%10==0)
{
如果((first2==34 | | first2==37)和&i==15)
{
printf(“A\n”);
}
如果((first2==51 | | first2==52 | | first2==53 | | first2==54 | | first2==55)和&i==16)
{
printf(“M\n”);
}
else if(first2/10==4&(i==16 | | i==13))
{
printf(“V\n”);
}
其他的
{
printf(“无效\n”);
}
}
其他的
{
printf(“无效\n”);
}
与Python中的C/Java代码最接近的等价物是:
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("A\n");
}
else if ((first2 == 51 || first2 == 52 || first2 == 53 || first2 == 54 || first2 == 55) && i == 16)
{
printf("M\n");
}
else if (first2 / 10 == 4 && (i == 16 || i == 13))
{
printf("V\n");
}
else
{
printf("INVALID\n");
}
}
else
{
printf("INVALID\n");
}
这不是很优雅,因为您必须使用while
重写(…;…;…)
的循环,并使用单独的行进行初始化和增量。请注意,his与您的接近,但有两个重要的区别:首先,i+=1
应该位于循环的末尾,因为for
的第三个块也在每次迭代后执行。还要注意Python中整数除法的/
这只是计算所有数字的总和。i%2
部分是不相关的,因为number//=10
位仅在该块内执行,因此它只会使外部循环运行两倍的时间。如果这确实是您想要的,您可以将其简化为此,而无需i
:
total = 0
i = 0
while number > 0:
if i % 2 == 0:
total += number % 10
number //= 10
i += 1
或者仅仅是这样:
while number > 0:
total += number % 10
number //= 10
但是,如果您希望每隔一个数字(从末尾开始)添加,例如123456
的6+4+2
,则必须将/=10
部分移动到外循环(在第一个版本中包括i
),即减少Python中的缩进。其余的都是一样的。不清楚你到底想用这段代码实现什么,但是看看你给出的C代码,我相信带“I”变量的行是无用的:你循环了一定的次数,但有一半的时间你什么都不做;你不妨循环一半的时间
您的代码的python等价物是:
total = sum(map(int, str(number)))
因此,除了'i'变量外,您已经得到了最好的答案。您的python
代码似乎与c
代码不等价。这是问题的一部分吗?将i+=1
移到循环的末尾运行无限循环的一种方法是:而True:
。假设OP使用的是Python 3,那么应该是/=
。@tobias_k当然,你是对的,我只是在阅读了你自己的答案之后才明白,浮点除法真的毫无意义。注意:现在发布的完整代码中,每次迭代都会以某种方式减少number
,因此i
并不是无关的,而且您也会做一些与我推断的不同的事情(具体是什么我还不确定,稍后将再次检查)。
# number should be initialized to some value
total = 0
while number > 0:
total += number % 10
number //= 10