Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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
I';我的Python代码中出现了一个数学域错误,不知道该怎么办_Python_Josephus - Fatal编程技术网

I';我的Python代码中出现了一个数学域错误,不知道该怎么办

I';我的Python代码中出现了一个数学域错误,不知道该怎么办,python,josephus,Python,Josephus,我正试图为Josephus问题编写一些代码,但我一直遇到一个奇怪的错误。我的代码如下所示: 导入数学 功率=2 originalnumber=int(输入(“要启动多少?”) powerof2=math.log(原始编号,power) 如果类型(powerof2)==int: powerof2tf=True 获胜人数=1 其他: powerof2tf=False newnumber=原始编号 尽管如此: newnumber=newnumber-1 variabletest=type(math.l

我正试图为Josephus问题编写一些代码,但我一直遇到一个奇怪的错误。我的代码如下所示:

导入数学
功率=2
originalnumber=int(输入(“要启动多少?”)
powerof2=math.log(原始编号,power)
如果类型(powerof2)==int:
powerof2tf=True
获胜人数=1
其他:
powerof2tf=False
newnumber=原始编号
尽管如此:
newnumber=newnumber-1
variabletest=type(math.log(newnumber,power))
如果variabletest==int:
打破
其他:
通过
winningseat=1+2*(原始编号newnumber)
打印(“获胜席位是”,winningseat)
当我尝试运行它时,会出现以下错误:

ValueError回溯(最近一次调用上次)

在()

--->14 variabletest=类型(math.log(newnumber,power))

ValueError:数学域错误


有什么想法吗?我不知道如何修复此问题。

您收到错误是因为
math.log(0,2)
未定义。这是一个很好的站点,可以更新您关于
log
如何在普通数学中工作的知识

日志0未定义。它不是一个实数,因为你不可能通过把任何东西提升到其他任何东西的幂来得到零。你永远不可能达到零,你只能用无穷大的负幂来接近它


你需要修改你的代码来处理
newnumber
变为零的问题,然后这个问题就会消失。

newnumber永远不应该等于零,它应该至少变为1或2。在某一点上(不久前),它会运行,但如果你输入10作为原始数,它会输出1,即使它应该是5。我同意它永远不应该等于零,但它确实是,这就是为什么你会得到错误。在第14行上方添加
print('newnumber:'+str(newnumber))
,并观察输出。我试着给你一些关于你的具体问题的提示,而不是为你解决问题,这不是这里的目的。啊,你是对的,它正在下降到零。由于某种原因,当它达到2的正确幂时,它不会停止。你需要看看你是如何测试你是否得到了一个好的价值。如果variabletest==int询问“variabletest的类型是int吗?”但是
math.log(…
将永远不会返回
类型==int
,那么请检查该测试的其他一些选项。
 12         import math

 13         newnumber = newnumber - 1
 15         if variabletest == int:

 16             break