0

math.pow (base/exponent) 需要逗号分隔的值...对于预分配的值工作正常,但在用户提交的值方面存在问题(在命令行中进行实验)。感谢帮助,因为我想开发这种东西,最终进行基本的数学测试。

exp = int(raw_input()) 

    while exp:
        print math.pow(int(raw_input))

我得到的错误是

ValueError: invalid literal for int() with base 10: '2,3' (这看起来很奇怪,因为这是一个指数,而不是日志函数......)

当我尝试:

exp = (raw_input()) 

while exp:
    print math.pow(exp)

我得到错误:

pow 预期 2 个参数,得到 1 个

即使我提交了 2,3 例如(用逗号)。

我还尝试将输入与 .split 连接,但在 pow 需要整数而不是“列表”时出现错误。

4

2 回答 2

2

当您使用逗号输入输入时,您会得到一个元组。您可以使用

eval(raw_input())

要不就

input()

将其从字符串转换为可用格式。一旦你有了一个元组,你就可以使用 * 符号来“解包”这个元组。因此,您将调用 math.pow(2, 3),而不是调用 math.pow((2, 3)),其中一个参数是元组 (2, 3)。

>>> exp = input()
2, 3
>>> math.pow(*exp)
8.0
于 2013-06-14T20:57:17.963 回答
1

"2,3"是一个字符串,将它传递给一个函数不会使它像两个不同的参数一样,(如您所料)。

>>> def func(arg):
...     print arg
...     
>>> func('a, b') 
a, b              # arg is a variable that stores the passed string

您应该首先将该字符串转换为两个数字,首先将其以逗号分隔,然后将 int() 应用于每个数字(如果它是项目)。

>>> import math
>>> math.pow(*map(int, '2,3'.split(',')))
8.0

首先使用 ',' 分割字符串str.split

>>> '2,3'.split(',')
['2', '3']               #str.split returns a list

现在我们需要整数,所以适用int()于每个值:

>>> map(int, '2,3'.split(',')) #apply int() to each item of the list ['2', '3']
[2, 3]

现在正如pow预期的那样,有两个参数,因此您可以使用*符号解包此列表并将项目传递给math.pow.

>>> math.pow(*[2 , 3])
8.0

更简单的方法是使用序列解包:

>>> a, b = [2, 3]
>>> math.pow(a, b)
8.0

python库中有另一个工具可以将字符串中的逗号分隔项转换为元组:

>>> from ast import literal_eval
>>> literal_eval('1, 2')
(1, 2)
>>> a,b  = literal_eval('1, 2')
>>> a
1
>>> b
2
于 2013-06-14T20:55:55.727 回答