命令行Python逗号分隔用户输入int值

时间:2013-06-14 20:54:12

标签: python math

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”。

2 个答案:

答案 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