可能是非常基本的问题,但是编写我的第一个程序并且不知道要搜索什么来找到答案。
我有一个看起来像这样的while语句:
while number > 9999 or number < 0 or number == 1111 or number == 2222 or number == 3333...
继续直到我到达9999.很多代码可能会缩短,我是否正确?不确定我在哪里可以阅读有关语法的内容,所以有人也可以将我链接到那里!
如果有人能提供帮助,我们会很高兴! :)
答案 0 :(得分:9)
使用模数运算符:
while number > 9999 or number < 0 or (number % 1111 == 0 and number != 0):
答案 1 :(得分:3)
您可以合并前两个语句
number > 9999 or number < 0
使用集合理论
number not in range(0,9999)
其余的你可以用简单的模运算来检查:
not number % 1111
每当在number
上调用上述操作时,它将返回0或不等于零的值。例如1 % 3 = 1
(我们将较小的数字除以较大的数字,因此我们只得到较小的数字),4 % 2 = 0
(因为4/2 = 2*2
所以没有剩余的剩余因此0结束)等。
在Python中,True
与1
相同,False
与0
相同。我们希望循环继续运行,直到number
具有可以除以1111而没有任何余数的值,因此我们必须否定该语句。让我们看一个如何工作的例子:
让我们说number = 53
。在这种情况下,由于模数参数number/1111 = 53/1111 = 53
,我们有1111
。这意味着我们得到True
(因为True == 53!= 0 == False),在用not
运算符取消后我们得到False
(因为not True
总是False
,反之亦然。当while
语句变为True
时,True
循环停止。
由于我们想检查其中任何一个是否while (number not in range(0,9999)) or (not number % 1111):
# do something
,我们可以这样做:
not in range(1,9999)
如果您想从范围中排除0,您只需转到/* Build: gcc -o test `sdl2-config --libs --cflags` test.c */
#include <stdio.h>
#include <stdlib.h>
#include <SDL2/SDL.h>
void MessageBox(void);
void clean(void);
int main(int argc, char* argv[]) {
SDL_Init(SDL_INIT_EVERYTHING);
atexit(clean);
SDL_DisplayMode mode;
int id = 0;
SDL_GetCurrentDisplayMode(id, &mode);
char smode[20];
sprintf(smode, "%ix%i@%iHz", mode.h, mode.w, mode.refresh_rate);
printf("%s", smode);
MessageBox();
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
"Missing file",
"File is missing. Please reinstall the program.",
NULL
);
return(0);
}
void MessageBox() {
const SDL_MessageBoxButtonData buttons[] ={ /* .flags, .buttonid, .text */
{0, 0, "no"},
{SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, 1, "yes" },
{ SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, 2, "cancel" },
};
const SDL_MessageBoxColorScheme colorScheme = { /* .colors (.r, .g, .b) */
{ /* [SDL_MESSAGEBOX_COLOR_BACKGROUND] */
{ 0, 0, 0 },
/* [SDL_MESSAGEBOX_COLOR_TEXT] */
{ 0, 255, 0 },
/* [SDL_MESSAGEBOX_COLOR_BUTTON_BORDER] */
{ 255, 255, 255 },
/* [SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND] */
{ 0, 0, 0 },
/* [SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED] */
{ 255, 0, 255 }
}
};
const SDL_MessageBoxData messageboxdata = {
SDL_MESSAGEBOX_INFORMATION, /* .flags */
NULL, /* .window */
"example message box", /* .title */
"select a button", /* .message */
SDL_arraysize(buttons), /* .numbuttons */
buttons, /* .buttons */
&colorScheme /* .colorScheme */
};
int buttonid;
if(SDL_ShowMessageBox(&messageboxdata, &buttonid) < 0) {
SDL_Log("error displaying message box");
}
if(buttonid == -1) {
SDL_Log("no selection");
} else {
SDL_Log("selection was %s", buttons[buttonid].text);
}
}
void clean() {
SDL_Quit();
}
。