首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双搜索:在领带的情况下,返回较低的值。

双搜索:在领带的情况下,返回较低的值。
EN

Stack Overflow用户
提问于 2020-06-20 07:25:23
回答 2查看 51关注 0票数 0

我正努力在期中学习,并且正在努力解决这个问题。问题是:

找到整数指数,使base**exponent最接近num。请注意,base**exponent可能大于或小于num。如果是领带,则返回较小的值。我已经得到了所有的东西,除了如何在领带的情况下返回较小的价值。

这是我的代码,函数closest_power(3,12)一直在指数3和2之间运行(正确的代码将返回2)。任何帮助都非常感谢。

代码语言:javascript
复制
def closest_power(base, num):
    exponential = base+num/2
    increment = 1
    while  abs(num-base**exponential) >= 0.01:
        print ("Exp: {}, Our number = {}, correct number: {}".format(exponential,base**exponential, num))
        if num > (num-base**exponential-2) and num <  (num-base**exponential):
            return expontential-1

        if base**exponential > num:
            exponential -= 1

        else:
            exponential += 1


    return exponential

print(closest_power(3,12))
EN

回答 2

Stack Overflow用户

发布于 2020-06-20 07:32:20

对于num是否介于两个指数之间的测试是不正确的,应该是

代码语言:javascript
复制
num > base**(exponential-1) and num < base**exponential

它也可以写成

代码语言:javascript
复制
base**(exponential-1) < num < base**exponential

你还有个打字错误,

代码语言:javascript
复制
return expontential-1

应该是

代码语言:javascript
复制
return exponential-1

并且您应该将起始值设置为

代码语言:javascript
复制
exponential = (base + num) // 2

为了确保它是一个整数,但是将其设置为:

代码语言:javascript
复制
exponential = num // base

总计:

代码语言:javascript
复制
def closest_power(base, num):
    exponential = num // base
    increment = 1
    while  abs(num-base**exponential) >= 0.01:
        print ("Exp: {}, Our number = {}, correct number: {}".format(exponential,base**exponential, num))
        if base**(exponential-1) < num < base**exponential:
            return exponential-1

        if base**exponential > num:
            exponential -= 1

        else:
            exponential += 1


    return exponential

print(closest_power(3,12))

输出:

代码语言:javascript
复制
Exp: 4, Our number = 81, correct number: 12
Exp: 3, Our number = 27, correct number: 12
2
票数 4
EN

Stack Overflow用户

发布于 2020-06-20 07:33:50

您可以使用日志简化您的问题。

你的问题是3**x = 12。找到x了吗?

应用日志

x*log3 3= log12

X=log3 12/log3 3

采用这一方法:

代码语言:javascript
复制
def exp(x,y):
   return(int(log(y)/log(x)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62482894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档