Я, может казаться, не выясняю, почему это - бесконечный цикл в Python??
for i in range(n):
j=1
while((i*j)<n):
j+=1
не был должен внешний цикл идти n времена. постепенное увеличение j до его равного n отделению i каждых раз?
I
начинается в 0
, поэтому , в то время как
, в то время как состояние остается всегда верным; См. Документы диапазона .
Вы можете создать «трассировку», показывающую состоятельные изменения переменных.
etc.
Вы можете доказать, что ваш след правильный, вставляя Print
.
Когда сомневаетесь, распечатайте его.
ISO-IEC 9899 заявляет:
5,1,2,2,1 Запуск программы
Если значение
argc
больше нуля, строка, на которую указываетargv [0]
, представляет имя программы;argv [0] [0]
должен быть нулевым символом, если имя программы недоступно из среды хоста. Если значениеargc
больше единицы, строки, на которые указываетargv [1]
-argv [argc-1]
, представляют параметры программы .
Я также использовал:
#if defined(_WIN32)
static size_t getExecutablePathName(char* pathName, size_t pathNameCapacity)
{
return GetModuleFileNameA(NULL, pathName, (DWORD)pathNameCapacity);
}
#elif defined(__linux__) /* elif of: #if defined(_WIN32) */
#include <unistd.h>
static size_t getExecutablePathName(char* pathName, size_t pathNameCapacity)
{
size_t pathNameSize = readlink("/proc/self/exe", pathName, pathNameCapacity - 1);
pathName[pathNameSize] = '\0';
return pathNameSize;
}
#elif defined(__APPLE__) /* elif of: #elif defined(__linux__) */
#include <mach-o/dyld.h>
static size_t getExecutablePathName(char* pathName, size_t pathNameCapacity)
{
uint32_t pathNameSize = 0;
_NSGetExecutablePath(NULL, &pathNameSize);
if (pathNameSize > pathNameCapacity)
pathNameSize = pathNameCapacity;
if (!_NSGetExecutablePath(pathName, &pathNameSize))
{
char real[PATH_MAX];
if (realpath(pathName, real) != NULL)
{
pathNameSize = strlen(real);
strncpy(pathName, real, pathNameSize);
}
return pathNameSize;
}
return 0;
}
#else /* else of: #elif defined(__APPLE__) */
#error provide your own implementation
#endif /* end of: #if defined(_WIN32) */
А затем вы просто должны проанализировать строку, чтобы извлечь имя исполняемого файла из пути.
-121--773100- Первое значение в i
будет 0. 0 умножить на все 0.
i
начинается с нуля, поэтому условие для внутреннего цикла всегда 0 * j < n
, которое всегда будет истинным.
i
начинается с 0
, поэтому условие в то время как
остается всегда верным; для получения дополнительной информации см. документы по диапазону .
ISO-IEC 9899 заявляет:
5,1,2,2,1 Запуск программы
Если значение
argc
больше нуля, последовательность, на которое указываетargv [0]
, представляет собой имя программы;argv [0] [0]
должен быть нулевым символом, если имя программы недоступно из среды хоста. Если значениеargc
больше единицы, то последовательности, на которые указываютargv [1]
-argv [argc-1]
, представляют параметры программы .
Я также использовал:
#if defined(_WIN32)
static size_t getExecutablePathName(char* pathName, size_t pathNameCapacity)
{
return GetModuleFileNameA(NULL, pathName, (DWORD)pathNameCapacity);
}
#elif defined(__linux__) /* elif of: #if defined(_WIN32) */
#include <unistd.h>
static size_t getExecutablePathName(char* pathName, size_t pathNameCapacity)
{
size_t pathNameSize = readlink("/proc/self/exe", pathName, pathNameCapacity - 1);
pathName[pathNameSize] = '\0';
return pathNameSize;
}
#elif defined(__APPLE__) /* elif of: #elif defined(__linux__) */
#include <mach-o/dyld.h>
static size_t getExecutablePathName(char* pathName, size_t pathNameCapacity)
{
uint32_t pathNameSize = 0;
_NSGetExecutablePath(NULL, &pathNameSize);
if (pathNameSize > pathNameCapacity)
pathNameSize = pathNameCapacity;
if (!_NSGetExecutablePath(pathName, &pathNameSize))
{
char real[PATH_MAX];
if (realpath(pathName, real) != NULL)
{
pathNameSize = strlen(real);
strncpy(pathName, real, pathNameSize);
}
return pathNameSize;
}
return 0;
}
#else /* else of: #elif defined(__APPLE__) */
#error provide your own implementation
#endif /* end of: #if defined(_WIN32) */
А затем вы просто должны проанализировать последовательность, чтобы извлечь имя исполняемого файла из пути.
-121--773100- Поскольку начальное значение i
равно 0.
Мне 0 Перепишите, как будтовары, как
for i in range(1,n):
j=1
while((i*j)<n):
j+=1
, используя эту версию функции диапазона, создаст диапазон, который запускается в 1 вместо 0
диапазон(n)
начинается с 0
, а не с 1
. 0 * j
всегда будет меньше, чем n
.
Впервые через внешний цикл внутренний цикл становится бесконечной петлей. Неважно, что происходит после этого. Там нет «после бесконечности».