dポイントプレゼントキャンペーン実施中!

Pythonのプログラムを教科書をみながら勉強しはじめました。
バージョンは3.0.1です。
下記の初歩的なプログラムで#の行でエラーがでて対応方法が
わかりません。 アドバイスいただけませんでしょうか。

#! /python30/python
# coding:shift_jis
'''
簡単な電卓です。
Usage: mycalc.py n (+-*/) m
'''
import sys, operator

OP={'+':operator.__add__,\
'-':operator.__sub__,\
'*':operator.__mul__,\
'/':operator.__truediv__,\
}

def calc(ls):
assert len(ls)==3 #ここでエラー
try:
op=OP(ls.pop(1)) # 真ん中の文字列をpop,数字のみ残る。
x,y=[float(u) for u in ls] # 残った文字列をfloatに変換
except:
print('Err:数字 演算子(+-*/) 数字 の順に引数をセットしてください。')
sys.exit()
return op(x,y)

if __name__=='__main__':
print(calc(sys.argv[1:])) #ここでエラー

(ここで質問するとTABのインデントがなくなってしまうようです。)

A 回答 (1件)

>assert len(ls)==3 #ここでエラー


この assert に引っかかってしまってということなら、
プログラムの実行の仕方がまずいです。

スクリプトの名前が sample.py だったとして

python sample.py 1 + 2

のようにしないといけませんが、どうやってますか?

そしてスクリプト自体にもエラーがありますね。
>op=OP(ls.pop(1)) # 真ん中の文字列をpop,数字のみ残る。
OP の直後は丸カッコではなく角カッコです。
op = OP[ls.pop(1)]
のように。

何かのテキストを元に打ち込んでいるものかもしれませんが、
>except:
>print('Err:数字 演算子(+-*/) 数字 の順に引数をセットしてください。')
>sys.exit()

少なくとも作り始めは何が元のでこの except節が実行されたかを握りつぶさないほうがいいですよ。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。
OP の直後は丸カッコではなく角カッコとし、
python mycalc.py 2 + 3(エンター)

とpython shell上で実行したら、うまくいきました。

引数は2(スペース)+(スペース)3 と入力しなければいけなかった
ようです。 

お礼日時:2009/02/21 17:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!