2016-12-07 5 views
0

私のプログラムでは、最初のmainとしてif文が書かれていますが、文字が入力されるたびにそれを数回入力する必要があり、変数num3とden3。python OOP if文に迷惑メールと変数が定義されていない

class menu: 
    def question(): 
     prnt = print("Which equation would like to do? \n A: Inverse the fracion \n B: Add 2 fractions \n C: Subtract 2 fractions \n D: Multiply 2 fractions \n E: Divide 2 fractions \n F: Square a fraction \n") 

    def ask(): 
     ask = input("") 
     return ask 

class fractions: 
    def numerator(): 
     ask = menu.ask() 
     if ask == "b" or menu.ask() == "B" or ask == "C" or ask == "c" or ask == "D" or ask == "d" or menu.ask() == "e" or menu.ask() == "e": 
      num1 = int(input("What is the first numerator? \n")) 
      num2 = int(input("What is the second numerator? \n")) 
      return num1 
      return num2 

     elif ask == "a" or ask == "A" or ask == "f" or ask == "F": 
      num1 = int(input("What is the numerator? \n")) 
      return num1 

    def denominator(): 
     ask = menu.ask() 
     if mask == "b" or ask == "B" or ask == "C" or ask == "c" or ask == "D" or menu.ask() == "d" or menu.ask() == "e" or menu.ask() == "e": 
      den1 = int(input("What is the first denominator? \n")) 
      den2 = int(input("What is the second denominator? \n")) 
      return den1 
      return den2 

     elif ask == "a" or ask == "A" or ask == "f" or ask == "F": 
      den1 = int(input("What is the denominator? \n")) 
      return den1 

class math(): 
    def math1(a,b): 
      num3 = den1 
      den3 = num1 
      return num3 
      return den3 

    def math2(a,b): 
     if den1 == den2: 
      num3 = num1 + num2 
      den3 = den1 
      return num3 
      return den3 

     if den1 != den2: 
      num1 = num1 * den2 
      num2 = num2 * den1 
      den3 = den1 * den2 
      num3 = num1 + num2 
      return num3 
      return den3 

    def math3(a,b): 
     if den1 == den2: 
      num3 = num1 - num2 
      den3 = den1 
      return num3 
      return den3 

     elif den1 != den2: 
      den3 = den1 * den2 
      num1 = num1 * den2 
      num2 = num2 * den1 
      num3 = num1 - num2 
      return num3 
      return den3 

    def math4(a,b): 
      num3 = num1 * num2 
      den3 = den1 * den2 
      return num3 
      return den3 

    def math5(a,b): 
      num3 = num1 * den2 
      den3 = den1 * num2 
      return num3 
      return den3 

    def math6(a,b): 
      num3 = num1.fractions().numerator() ** 2 
      den3 = den1.fractions().denominator() ** 2 
      return num3 
      return den3    

    def reduce(a,b): 
     maxnum = 1000 
     while maxnum > 0: 
      if num3 % maxnum == 0 and den3 % maxnum == 0: 
       num3 = num3/maxnum 
       den3 = den3/maxnum 
      maxnum = maxnum - 1 
     return num3 
     return den3 

def main(): 
    start = menu.question() 
    ask = menu.ask() 

    Numer = fractions.numerator() 

    Duner = fractions.denominator() 

    if menu.ask() == "A" or menu.ask() == "a": 
     math.math1(Numer, Duner) 
     num3 = math.math1(num3) 
     den3 = math.math1(den3) 

    elif menu.ask() == "B" or menu.ask() == "b": 
     math.math2(Numer, Duner) 
     num3 = math.math2(num3) 
     den3 = math.math2(den3) 

    elif menu.ask() == "C" or menu.ask() == "c": 
     math.math3(Numer, Duner) 
     num3 = math.math3(num3) 
     den3 = math.math3(den3) 

    elif menu.ask() == "D" or menu.ask() == "d": 
     math.math4(Numer, Duner) 
     num3 = math.math4(num3) 
     den3 = math.math4(den3) 

    elif menu.ask() == "E" or menu.ask() == "e": 
     math.math5(Numer, Duner) 
     num3 = math.math5(num3) 
     den3 = math.math5(den3) 

    elif menu.ask() == "F" or menu.ask() == "f": 
     math.math6(Numer, Duner) 
     num3 = math.math6(num3) 
     den3 = math.math6(den3) 

    math.reduce(num3, den3) 

    print(num3, '/', den3) 

main() 

if文の最初のセットは、大文字と小文字の両方でa〜fの文字をカバーします。

答えて

1

menu.ask()を複数回呼び出しています。あなたがそれに書かれているたびに、 if menu.ask() == 'a' or menu.ask() == 'A'...、それは(その/が短絡しない限り)その関数を呼び出して、入力を求めます。その代わり、一度それを呼び出して、それを保存します。

ask = menu.ask() 
if ask == 'b' or ask == 'B'... 
    ... 
elif ask == 'a' or... 
    ... 

またはin演算子を使用します。

ask = menu.ask() 
if ask in 'bcdeBCDE': 
    ... 
elif ask in 'aAfF': 
    ... 

は、複数の入力検証の戦略のためのAsking the user for input until they give a valid responseを参照してください。

+0

OPが代わりに 'bcde''の' ask.lower()を使用することを示唆するのはいいでしょうか? –

+0

@leaf - これは、リンクされた質問のトップ答えです。ここでは、入力の検証を改善するためのすべての可能な方法を検討したくありませんでした。 – TigerhawkT3

+0

私は変更を行い、if文のためには完全に機能しますが、今度は分子を要求して最後のものを入力すると空白になり、分母が現れません。 –

関連する問題