Python 如何在函数中使用带返回的打印?
我想知道如何使用Python 如何在函数中使用带返回的打印?,python,Python,我想知道如何使用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'
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
如果像这样使用脚本:./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
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
这可以根据您的需要工作。对于特殊输入,您的预期输出是什么?您试图实现什么?过滤掉来自用户的非整数文本的通常行为是调用int(sys.argv[1])
并处理ValueError异常。@Kasra如果您像这样使用脚本:./myscript.py 10,它应该输出数字10,如果您像这样使用它:./myscript.py Kasra,它应该输出Kasra不是一个数字。我在运行代码时遇到这个错误:print arg1/5 TypeError:不支持的操作数类型/:“str”和“int”@BrunoAlves:您使用的解释器版本是什么?你运行了我的代码的副本吗?在发布SO之前,我在2.7.6中对此进行了测试。我使用Python 2.7.8,并在函数内部复制了您的代码,在函数外部打印,就像在我的示例中一样。@BrunoAlves:我已经编辑了我的答案,希望您理解我的观点。那么我应该使用什么:#永远不要使用eval(),这只是一个示例它接受“a01”作为有效结果(您需要使用match
而不是search
)和条件type(arg1)=type(str())
仍然没有任何意义…@myaut-thanq进行更正。是的,我们需要使用匹配
而不是搜索
。我刚刚编辑了Bruno Alves发布的程序,因此我将其保留下来,因为这只是为了便于他理解。