0

我对 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)
4

3 回答 3

1

Programs 的命令行参数总是以字符串形式给出(这不仅适用于 python,而且至少适用于所有与 C 相关的语言)。这意味着当您将“1”之类的数字作为参数时,您需要将其显式转换为整数。在您的情况下,您可以尝试转换它并假设它是一个字符串,如果这不起作用:

try:
    v = int(a)
    #... do int related stuff
except ValueError:
    #... do string related stuff

虽然这是一个糟糕的设计,但最好让用户决定他是否希望将参数解释为字符串 - 毕竟,用户给出的每个 int 也是一个有效的字符串。例如,您可以使用 argparse 之类的东西,并指定两个不同的参数,用“-i”表示 int,用“-s”表示字符串。

于 2013-04-30T07:03:07.863 回答
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
于 2013-04-30T09:09:35.050 回答
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"
于 2013-04-30T07:23:58.347 回答