2017-06-21 7 views
0

複数の数値を取ることのできる簡単な電卓を使っています。私が書いたより単純な電卓から必要なコードを残しておきます。演算子の問題と数式の分割

このスニペットは、文字列を分割しようとします。 oper_lib変数に演算子を配置する際に問題があります また、汎用変数で関数を定義し、その関数を使用する必要がある場合に同じ関数を呼び出すことはできますか?

>""" basic calc - designed to take multiple >variables   """ 

    from datetime import * 

    now = datetime.now() 

    #Intro 

    print ("\n") 

    print ("Welcome to BasicCalc:Unstable! \n") 

    print ("If you need HELP, type help \n") 


    print (now) 

    #Beginning processing intake 


    ui1 = input("Please enter figure: ") 


    intake_list = ui1.split(" ") 

    lenth_list= len(intake_list) 


    if lenth_list % 2 == 0: 
     print ("invalid entry") 
    else: 
     print ("") 

    """ 
    Thoughts on this/ ideas: 

    - build a secondary math op list 
    - add two for - in loops in quick succession 
    """ 

    def do_math(intake_list): 
     """ proforms math function from a list""" 

    oper_lib = [ 
      "+" , 
      "-" , 
      "*" , 
      "/" 
       ] 


    for i in intake_list: 
     for n in i: 
      if n in oper_lib: 
       intake_list.insert(i-1 , " ") 
       intake_list.insert(i+1 , " ") 
       print(intake_list) 



    print (do_math(intake_list))  
    print (intake_list) 
    print (lenth_list) 
+0

プログラムは図形を要求します。この数字は数字、表現、何ですか?私は22歳になり、これらの3つの結果を別々の行に吐き出しています:なし['22'] 1.あなたは、出力が期待していることを示唆するヒントはありますか? –

+0

考え方は、各整数/オペランドの間にスペースを入れて完全な式を入力することです。プログラムはこれを文字列として取り、それをリストに分割し、さらに処理して答えを返します。だから、あなたが5-5と言うプログラムを動かそうとするなら、> do_mathはこれを> ['5'、 ' - '、 '5']に分割しなければなりません。 – user43850

+0

あなたはあなた自身と矛盾していると思います。あなたが '['5'、 ''、 ' - '、 ''、 '5']'にしようとしているようです。また 'do_math(...)'はNoneを返します。これは 'return'キーワードとそれに対応する値を指定しない限り、関数はNoneを返すからです。 – BLaZuRE

答えて

0

mathでは、ユーザーが入力した文字のリストを繰り返しています。ユーザーが '5 - 5'を入力した場合、吸気リストには['5'、 ' - '、 '5']が含まれます。ですから、反復するときには、イテレータ変数iを使用するときにエラーが発生し、値は ' - 'になります。 「 - 」あなたのプログラムから1を減算しようとしている行で:

intake_list.insert(i-1 , " ") 

私はこれを行うことをお勧めします:)

ui1 = input("Please enter figure: ") 

try: 
    print(eval(ui1)) 
except: 
    print("Error on input") 
sys.exit() 
0

それはのために考えるために、少なくとも初めに、役立つ可能性ループは "set"/"array"/"list"/etcの各項目を通過します。適切な用語は、forループが、与えられたiterableの各値に対してを反復するということです。

for *variable* in *iterable* 
    #do something 

for listValue in [12, 'apple', 24] 
    print listValue 

上記(returnキーワードは異なる...コンソールに)出力します

12 
apple 
24 

しかし

for listValue in '12' 
    print(listValue) 

上記

12 

を印刷しますIあなたが何をしようとしているのか分かりましたo 2番目のループで行うが、作業が多すぎると誤った結果が出る。 (自分自身のためのヒント、そして何十年にもわたるデバッグのためのヒント:0,1、または2の値を持つリストのような簡単な入力を使って頭や紙にコードを実行し、プログラムとして動作させ、それが何をするかを参照してください)。文字列を反復できる最も多くの時間は一度です。上記に基づいて、inもリストのインデックス/キー/「配置」に関する情報を提供しません。リストに挿入するために探しているようです。

あなたがしたいことは、現在の「プレースメント」を取得して、それをイテレート可能なスペースで囲むことです。

簡単な解決策は、カウンタを保持することです(数値または演算子ごとに1を加算すること)。これにより、現在の値のスペースを配置する必要がある場所を把握できます。

もう1つの解決策は、新しいリスト内のアイテムの数を数え、その数に基づいて追加することです。

+0

2番目のループはリスト内のオブジェクトを繰り返し処理できませんか?私はこれを無駄にしようとし続けます。それは "合法的な" Pythonで行うには? – user43850

+0

どのオブジェクトも反復可能ではありません。一つのことを繰り返して何を達成しようとしていますか?あなたが文字通りしているのは、数値でない限り 'listValue = '12'です。この場合、エラーが発生します。 '12!= '12''何かが合法であれば、それをするべきではありません。 – BLaZuRE