【问题标题】:I'm getting a math domain error in my Python code and have no clue what to do我的 Python 代码出现数学域错误,不知道该怎么做
【发布时间】:2019-10-10 00:44:02
【问题描述】:

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

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:数学域错误

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

【问题讨论】:

    标签: python josephus


    【解决方案1】:

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

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

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

    【讨论】:

    • newnumber 不应该等于 0,它应该在最低时达到 1 或 2。在某一时刻(不久前)它会运行,但如果你输入 10 作为 originalnumber 它会输出 1,即使它应该是 5。
    • 我同意它不应该等于零,但它确实如此,这就是您收到错误的原因。在第 14 行上方添加 print('newnumber: ' + str(newnumber)) 并观察输出。我试图在不为您解决问题的情况下就您的具体问题向您提供提示,这不是 SO 的目的。
    • 啊,你是对的,它正在下降到零。由于某种原因,当它达到 2 的幂时它并没有停止
    • 正确。您需要查看如何测试您是否获得了良好的价值。您的if variabletest == int 行在询问“变量测试是否为 int 类型?”但是math.log(... 永远不会返回type == int,因此请查看该测试的其他一些选项。
    猜你喜欢
    • 2022-07-26
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    相关资源
    最近更新 更多