math.pow(base / exponent)需要逗号分隔值...对于预先指定的值工作正常,但是在用户提交的值上有问题(在命令行中进行试验)。帮助赞赏,因为我想开发这种东西最终进行基本的数学测试。
exp = int(raw_input())
while exp:
print math.pow(int(raw_input))
我得到的错误是
ValueError:对于带有基数为10的int()的无效文字:'2,3'(这看起来很奇怪,因为这是一个指数,而不是日志函数......)
当我尝试:
exp = (raw_input())
while exp:
print math.pow(exp)
我收到错误:
pow预计有2个参数,得到1个
即使我提交2,3例如(使用逗号)。
我也尝试将输入与.split联系起来,但是关于pow需要整数的错误,而不是“list”。
答案 0 :(得分:2)
当您使用逗号输入输入时,您将获得一个元组。你可以使用
eval(raw_input())
或者只是
input()
从字符串到可用格式。一旦你有一个元组,你可以使用*表示法来“解包”元组。所以不是调用math.pow((2,3)),而是一个参数是元组(2,3),你将调用math.pow(2,3)。
>>> exp = input()
2, 3
>>> math.pow(*exp)
8.0
答案 1 :(得分: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