Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Python编写这个C for循环最好的解决方案是什么?_Python_Loops_For Loop - Fatal编程技术网

如何用Python编写这个C for循环最好的解决方案是什么?

如何用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

我需要用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(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