0

我正在尝试为约瑟夫斯问题编写一些代码,但我不断收到一个奇怪的错误。我的代码如下所示:

import math
power = 2
originalnumber = int(input("how many to start?"))
powerof2 = math.log(originalnumber,power)
if type(powerof2) == int:
    powerof2tf = True
    winningseat = 1
else:
    powerof2tf = False
    newnumber = originalnumber
    while True:
        newnumber = newnumber - 1
        variabletest = type(math.log(newnumber,power))
        if variabletest == int:
            break
        else:
            pass
    winningseat = 1+2*(originalnumber-newnumber)

print("the winning seat is", winningseat)

当我尝试运行它时,它给了我这个错误:

ValueError Traceback(最近一次调用最后一次)

在 ()

 12         import math

 13         newnumber = newnumber - 1

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

 15         if variabletest == int:

 16             break

ValueError:数学域错误

有任何想法吗?我不知道如何解决这个问题。

4

1 回答 1

0

您收到错误是因为math.log(0, 2)is undefined这是一个很好的网站,可以让您重新了解log一般数学的工作原理。

日志 0 未定义。这不是一个实数,因为你永远无法通过将任何事物提升到其他事物的力量来获得零。您永远无法达到零,您只能使用无限大的负幂来接近它。

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

于 2019-10-09T13:29:39.330 回答