穷举枚举python

2024-09-28 03:23:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要创建一个程序,在给定指数小于7且大于1的情况下,找到单个数字的基数和指数。我使用的是python2.7。在

我的代码如下:

def determineRootAndPower(inputInteger):
    pwr = 1
    num = inputInteger
    while (num) > 0 and (0 < pwr < 7):
        inputInteger = inputInteger - 1
        pwr = pwr + 1
        num = num - 1
    if int(num)**int(pwr) == inputInteger:
            print(str(num) + (" to the power of ") + str(pwr) + (" equals ") + str(inputInteger) + ("!"))
    else: 
        print("No base and root combination fit the parameters of this test")

有人能就这个问题给我一些一般性的建议吗?现在我总是收到不正确的“else”语句。在


Tags: andofthe程序情况数字指数else
1条回答
网友
1楼 · 发布于 2024-09-28 03:23:19

首先,您总是点击else的原因是在循环结束后执行if检查。所以,不是检查每个值,而是检查最后一个值。在

如果任何值匹配,则需要打印“Yes”答案,只有all值失败时才会打印“No”。为此,您需要将if放入循环中,一旦找到第一个成功的break(除非您想打印所有的匹配项,而不是只打印第一个匹配项),然后,else就变成了只有在找不到任何匹配项时才会执行的操作。在

您可以将else:while:一起使用,只有当您没有break时,它才会运行。但是许多人发现这很令人困惑,所以在成功时只使用return而不是{},并且只要完成循环就总是打印失败消息。在


同时,我认为您希望做的是处理从inputNumber到{}的所有{}值,并且,对于每个值,处理从1到7的所有{}值。为此,需要一个嵌套循环。在

在这里,使用for循环要比每次初始化一个变量并使用+1或{}循环简单得多。在

把所有这些放在一起:

def determineRootAndPower(inputInteger):
    for num in range(inputInteger, 0, -1):
        for pwr in range(1, 7):
            if int(num)**int(pwr) == inputInteger:
                print(str(num) + (" to the power of ") + str(pwr) + (" equals ") + str(inputInteger) + ("!"))
                return
    print("No base and root combination fit the parameters of this test")

你可以进一步简化。在

您真正想要的是范围内任何num和范围内任何pwr的所有组合。你不在乎嵌套是如何工作的,你只需要所有的组合。在数学术语中,要循环两个范围的笛卡尔积。函数^{}正是这样做的。所以:

^{pr2}$

顺便说一句,有两件事让这段代码很难阅读,这是毫无道理的。在

首先,如果您想打印出一个表达式,那么使用format(或%)比手动将内容转换为字符串并将它们连接在一起要容易得多。格式化可以让你看到输出的样子,而不必去弄清楚,它会自动处理字符串化和相关的事情。在

其次,在不需要的地方加上括号会使代码更难阅读。你的print表达式的括号使你的代码看起来像Python3,但实际上它是Python2。而且表达式中每个字符串周围的圆括号乍一看就更糟了,看起来它们应该在引号内。即使是测试表达式中的括号,(num) > 0 and (0 < pwr < 7),也会迫使读取器正常暂停,这样的圆括号被用来覆盖运算符组合在一起的正常方式,因此您必须考虑正常的num > 0 and 0 < pwr < 7会有什么问题,以及圆括号如何使其不同,最终发现其实是一样的。在

不管怎样,比较一下这两个,看看哪一个更容易理解:

print "{} to the power of {} equals {}!".format(num, pwr, inputInteger)
print(str(num) + (" to the power of ") + str(pwr) + (" equals ") + str(inputInteger) + ("!"))

相关问题 更多 >

    热门问题