こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Pythonプログラミングでエラー

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のインデントがなくなってしまうようです。)

投稿日時 - 2009-02-21 16:54:23

QNo.4736873

困ってます

質問者が選んだベストアンサー

>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節が実行されたかを握りつぶさないほうがいいですよ。

投稿日時 - 2009-02-21 17:25:50

お礼

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

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

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

投稿日時 - 2009-02-21 17:49:41

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問