def parse(expression):
operators= set("*/+-")
numbers= set("0123456789")#not used anywhere as of now
opExtrapolate= []
numExtrapolate= []
buff=[]
for i in expression:
if i in operators:
if len(buff) >0: #prevents buff if multiple operators
numExtrapolate.append(''.join(buff))
buff= []
opExtrapolate.append(i)
opExtrapolation=opExtrapolate
else:
buff.append(i)
numExtrapolate.append(''.join(buff))
numExtrapolation=numExtrapolate
print(numExtrapolation)
print("z:", len(opExtrapolation))
return numExtrapolation, opExtrapolation
def errors():
numExtrapolation,opExtrapolation=parse(expression)
#Error for muliple operators
if (len(numExtrapolation) ==3) and (len(opExtrapolation) !=2):
print("Bad1")
if (len(numExtrapolation) ==2) and (len(opExtrapolation) !=1):
print("Bad2")
#
以前の質問に同様のコードを投稿しましたが、この投稿では質問の前提が異なります。
上記のコードは、ユーザーが変数式に入力した数学的な入力を受け取り、それをオペランドと演算子に分割します。エラー関数は、入力が正しくない場合、後でエラーを出力します。
入力は次のようになります。演算子は set("*/+-") にのみ含めることができ、オペランドは実数です。したがって、入力例は 45/23+233 になります。
SO ユーザーの助けを借りて、エラーの 1 つ (複数のオペレーターのエラー) を機能させることができましたが、さらにいくつかのエラー メッセージの実装に問題があります。
1)入力に数値または許可された演算子ではない項目が含まれている場合、エラーメッセージが表示されます
2) ユーザーが .23 や 554 などの数値を入力すると、小数点の前または後に数値がない場合、別のエラーが表示されます (0.23 のような数値で問題ないことに注意してください)。
3) ユーザーがゼロで除算しようとすると、エラーが表示されます。
::私が試したこと:
parse() の else ステートメントで、buff.append(i) に条件を付けて、buff.isdigit()==true の場合にのみそのコードを実行しようとしましたが、buff に数字がないというエラーが発生しました。 . また、「numbers」(以下のコード) というセットを作成し、最初の for ステートメントと同様の for ステートメントを使用して buff.append(i) をそのセットに制限しようとしました。しかし、残念ながら何も機能しませんでした。ありとあらゆる助けをいただければ幸いです。
以下のコードより高度なコードを大量に導入しないでください。コードを完全に変更するのではなく、問題を修正しようとしています。ご助力いただきありがとうございます。