环境
Mac Os X 10.9
python 2.7
实现功能
命令行传入公式,输出结果
出错原因
‘*‘ 号把整个目录下的文件都当作参数传入了
问题
如何正确传入 * 号?
操作
输入公式 ’2 * 3‘:
python calc.py 2 * 3
print sys.argv 的结果
['calc.py', '2', 当前目录下所有文件名如't1_1.py', '3']
返回错误
Traceback (most recent call last):
File "calc.py", line 54, in
main(sys.argv)
File "calc.py", line 51, in main
calc(argv)
File "calc.py", line 16, in calc
bNum = float(bNum)
ValueError: could not convert string to float: backup_ver2.py
源码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import os
def calc(argv):
aNum = argv[1]
Opr = argv[2]
bNum = argv[3]
if '.' in aNum:
aNum = float(aNum)
else:
aNum = int(aNum)
if '.' in bNum:
bNum = float(bNum)
else:
bNum = int(bNum)
Opr = str(Opr)
if Opr == '+': res = aNum + bNum
elif Opr == '-': res = aNum - bNum
elif Opr == '*': res = aNum * bNum
elif Opr == '/': res = aNum / bNum
elif Opr == '%': res = aNum % bNum
elif Opr == '**' or Opr == '^':
res = aNum ** bNum
else:
print "Operator error: '%s'" % Opr
o2f(argv, res)
print res
def showres():
filename = open('calc', 'r')
fileread = filename.readlines()
for eachLine in fileread:
print eachLine,
filename.close()
def o2f(argv, res):
filename = open('calc', 'a')
filename.write(argv[1] + argv[2] + argv[3] + '=' + str(res) + os.linesep)
filename.close()
def main(argv):
'''useage:
print -- show all the result
example: 1 + 1 -- to get the result'''
if argv[1] == 'print':
showres()
else:
calc(argv)
if __name__ == '__main__':
main(sys.argv)