我是python编程的新手,我来自Unix / Linux管理和shell脚本背景。我正在尝试在python中编写一个接受命令行参数的程序,并根据类型(int,str)执行某些操作。但是在我的情况下,输入始终被视为字符串。请提供建议。
#!/usr/bin/python
import os,sys,string
os.system('clear')
# function definition
def fun1(a):
it = type(1)
st = type('strg')
if type(a) == it:
c = a ** 3
print ("Cube of the give int value %d is %d" % (a,c))
elif type(a) == st:
b = a+'.'
c = b * 3
print ("Since given input is string %s ,the concatenated output is %s" % (a,c))
a=sys.argv[1]
fun1(a)
答案 0 :(得分:1)
程序的命令行参数总是以字符串形式给出(这不仅适用于python,而且至少适用于所有与C相关的语言)。这意味着当您将“1”这样的数字作为参数时,需要将其显式转换为整数。在您的情况下,您可以尝试转换它并假设它是一个字符串,如果这不起作用:
try:
v = int(a)
#... do int related stuff
except ValueError:
#... do string related stuff
这个 设计不好,最好让用户决定是否要将参数解释为字符串 - 毕竟,用户给出的每个int也是有效的串。例如,你可以使用像argparse这样的东西,并指定两个不同的参数,用“-i”表示int,“ - s”表示字符串。
答案 1 :(得分:0)
首先,输入将始终被视为字符串。
您可以使用argparse:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("cube", type=int,
help="Cube of the give int value ")
args = parser.parse_args()
answer = args.cube**3
print answer
python prog.py 4
64
所有整数都有一个__int__属性,因此您可以使用该属性来区分int和string。
if hasattr(intvalue, __int__):
print "Integer"
答案 2 :(得分:0)
import argparse, ast
parser = argparse.ArgumentParser(description="Process a single item (int/str)")
parser.add_argument('item', type=ast.literal_eval,
help='item may be an int or a string')
item = parser.parse_args().item
if isinstance(item, int):
c = item ** 3
print("Cube of the give int value %d is %d" % (item,c))
elif isinstance(item, str):
b = item + '.'
c = b * 3
print("Since given input is string %s ,the concatenated output is %s"
% (item,c))
else:
pass # print error