简体   繁体   English

我的 Python 代码出现数学域错误,不知道该怎么做

[英]I'm getting a math domain error in my Python code and have no clue what to do

I'm trying to do some code for the Josephus Problem, but I keep getting a weird error.我正在尝试为约瑟夫斯问题编写一些代码,但我不断收到一个奇怪的错误。 My code looks like this:我的代码如下所示:

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)

When I try to run it it gives me this error:当我尝试运行它时,它给了我这个错误:

ValueError Traceback (most recent call last) ValueError Traceback(最近一次调用最后一次)

in ()在 ()

 12         import math

 13         newnumber = newnumber - 1

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

 15         if variabletest == int:

 16             break

ValueError: math domain error ValueError:数学域错误

Any ideas?有任何想法吗? I have no clue how to fix this.我不知道如何解决这个问题。

You are getting the error because math.log(0, 2) is undefined .您收到错误是因为math.log(0, 2)undefined Here's a good site to refresh your knowledge on how log works in general math.这是一个很好的网站,可以让您重新了解log在一般数学中的工作原理。

log 0 is undefined.日志 0 未定义。 It's not a real number, because you can never get zero by raising anything to the power of anything else.这不是一个实数,因为你永远无法通过将任何事物提升到其他事物的力量来获得零。 You can never reach zero, you can only approach it using an infinitely large and negative power.您永远无法达到零,您只能使用无限大的负幂来接近它。

You need to revise your code to handle newnumber getting to zero, then this problem will go away.你需要修改你的代码来处理newnumber变为零,那么这个问题就会 go 消失。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM