Python 用于循环与用于显示的While循环;“一”;价值(CS50)

Python 用于循环与用于显示的While循环;“一”;价值(CS50),python,c,loops,cs50,strlen,Python,C,Loops,Cs50,Strlen,观看第2周的CS50讲座(此处:),他通过在字符串的字符上运行while循环,重新实现strlen,并使用此循环(其他代码已编辑): 我的问题是:能否在for循环中说明上述内容 我试图创建一个,但由于for循环的格式化方式,它似乎在每次迭代后强制输出,这与while循环不同,while循环允许在满足特定条件后输出一个循环 我很好奇,在这种情况下,for循环是否可以实现相同的“一次性、有条件”输出。如果我没记错的话,while是C语言所独有的,而Python等其他语言则专门使用了for循环(如果我

观看第2周的CS50讲座(此处:),他通过在字符串的字符上运行
while
循环,重新实现
strlen
,并使用此循环(其他代码已编辑):

我的问题是:能否在
for
循环中说明上述内容

我试图创建一个,但由于
for
循环的格式化方式,它似乎在每次迭代后强制输出,这与
while
循环不同,while循环允许在满足特定条件后输出一个循环


我很好奇,在这种情况下,
for
循环是否可以实现相同的“一次性、有条件”输出。如果我没记错的话,
while
是C语言所独有的,而Python等其他语言则专门使用了
for
循环(如果我错了,请告诉我!)。

同样可以使用for循环编写。比如说

string s = get_string();
int n = 0;
for ( ; s[n] != '\0'; n++ );
printf("%i",n);
string s = get_string();
size_t n = 0;
for ( ; s[n] != '\0'; n++ );
printf("%zu",n);
然而,这个带有空子语句的for循环可能会混淆代码的读者,即使它是这样写的

for ( ; s[n] != '\0'; n++ ) /* empty body */;

通常相同的事情可以用不同的方式来完成。你应该选择一个更具表现力的结构。对于此任务,最好使用while循环

考虑到对变量
n
使用type
size\u t
而不是type
int
更为正确

比如说

string s = get_string();
int n = 0;
for ( ; s[n] != '\0'; n++ );
printf("%i",n);
string s = get_string();
size_t n = 0;
for ( ; s[n] != '\0'; n++ );
printf("%zu",n);

也可以使用for循环来编写。比如说

string s = get_string();
int n = 0;
for ( ; s[n] != '\0'; n++ );
printf("%i",n);
string s = get_string();
size_t n = 0;
for ( ; s[n] != '\0'; n++ );
printf("%zu",n);
然而,这个带有空子语句的for循环可能会混淆代码的读者,即使它是这样写的

for ( ; s[n] != '\0'; n++ ) /* empty body */;

通常相同的事情可以用不同的方式来完成。你应该选择一个更具表现力的结构。对于此任务,最好使用while循环

考虑到对变量
n
使用type
size\u t
而不是type
int
更为正确

比如说

string s = get_string();
int n = 0;
for ( ; s[n] != '\0'; n++ );
printf("%i",n);
string s = get_string();
size_t n = 0;
for ( ; s[n] != '\0'; n++ );
printf("%zu",n);

此代码在这种情况下也适用:

int n=0;
for(;s[n];n++);
printf("%d ",n);
工作原理:


字符串元素具有ASCII值,因此在字符串中包含字符之前,for循环的条件部分为true。当它到达字符串末尾,即“\0”(“\0”的整数值为零)时,条件失败,循环退出

此代码在这种情况下也适用:

int n=0;
for(;s[n];n++);
printf("%d ",n);
工作原理:


字符串元素具有ASCII值,因此在字符串中包含字符之前,for循环的条件部分为true。当它到达字符串末尾,即“\0”(“\0”的整数值为零)时,条件失败,循环退出

“如果我错了,请告诉我!”,对于(;s[n]!='\0';n++)来说,您是大错特错的
“while是C lang独有的”我不知道你从哪里得到的。这些都很常见。您是在寻找Python答案还是C答案,因为我不清楚除了声明错误的假设之外,为什么还要用Python标记它?确实是错误的!我的循环必须以正确的方式交叉:
for(size\t n=0;s[n]!='\0';n++){}
。或者你也可以用草率、过时的方式来做。“告诉我我是否错了!”,你对(;s[n]!='\0';n++)的
非常错误“while是C lang独有的”我不知道你从哪里得到的。这些都很常见。您是在寻找Python答案还是C答案,因为我不清楚除了声明错误的假设之外,为什么还要用Python标记它?确实是错误的!我的循环必须以正确的方式交叉:
for(size\t n=0;s[n]!='\0';n++){}
。或者你也可以用草率、过时的方式来做。这就是为什么很多人使用
{}
而不是
,以更清楚地说明循环体是空的。@InternetUssie您可以只使用前面的注释;。但是无论如何,这样的代码都会让读者感到困惑。请允许我澄清一下-
while
循环会给你一个输出-
while
循环会输出6,但是
for
循环(使用
int
——我还不明白
大小
)会输出0123456,否?@kadomatsu输出语句是for循环后的以下语句。因此,它将在for循环结束后执行。for循环有一个空的子语句,这是for循环除了直接在其中指定的表达式外不会执行任何操作。还有@vladfrommosco当我们在这里时,为什么使用
size\u t
而不是
int
?这就是为什么很多人使用
{}
而不是
,以更清楚地说明循环体是空的。@InternetUssie您可以只使用前面的注释;。但是无论如何,这样的代码都会让读者感到困惑。请允许我澄清一下-
while
循环会给你一个输出-
while
循环会输出6,但是
for
循环(使用
int
——我还不明白
大小
)会输出0123456,否?@kadomatsu输出语句是for循环后的以下语句。因此,它将在for循环结束后执行。for循环有一个空的子语句,该语句表示for循环除了直接在其中指定的表达式外将不执行任何操作。还有@vladfrommosco当我们在这里时,为什么使用
size\u t
而不是
int