我想知道如何使用print
返回两个不同的值。
第一个if
语句应返回参数arg1
,第二个if
语句应返回文本“它不是数字”。
有人能给我一个如何解决问题的提示吗?
import sys
arg1 = (sys.argv[1])
def formatnumber(arg1):
if type(arg1) == type(int()):
return arg1
if type(arg1) == type(str()):
return "It's not a number"
formatnumber(arg1)
print arg1
答案 0 :(得分:2)
如果你使用这样的脚本:./ myscript.py 10,它应该输出数字10,如果你这样使用它:./ myscript.py Kasra,它应该输出Kasra不是数字。
就像我在评论中提到的那样,你做错了。在Python中,正确的方式是说某些数据不是预期的,不是返回“特殊值”而是引发异常。另请注意,Python不会自动解析传入的参数,因此您的函数应如下所示:
def formatnumber(arg1):
arg1 = eval(arg1) # Never use a eval(), this is only an example
if not isinstance(arg1, int):
raise ValueError("not a number")
return arg1
int()
构造函数已经这样做了,所以让语言确定传入的字符串是否可以强制转换为整数并处理错误。
以下是您的脚本的完整代码:
import sys
try:
arg1 = int(sys.argv[1])
except IndexError:
print >> sys.stderr, "You didn't provide an argument"
sys.exit(1)
except ValueError:
print >> sys.stderr, "{} is not a valid integer".format(sys.argv[1])
sys.exit(1)
# Work with arg1 like with integer, i.e.
print arg1 / 5
答案 1 :(得分:0)
python将来自sys.argv []的命令行参数视为字符串,因此您需要进行模式匹配以确定传递的参数是否为数字。你应该像这样编辑你的程序。
import sys
import re
def formatnumber(arg1) :
pattern = "[0-9]+"
if re.compile(pattern).match(arg1) :
return arg1
elif type(arg1) == type(str()):
return "It's not a number"
if __name__=="__main__" :
arg1=sys.argv[1]
res = formatnumber(arg1)
print res
这可以按照您的要求运作。