【问题标题】:python OOP if statement requires spam and variable not definedpython OOP if语句需要垃圾邮件和未定义的变量
【发布时间】:2017-04-21 22:31:08
【问题描述】:

在我的程序中,我有一个 if 语句作为我的第一个 main,但是每当输入字母时,它需要您再输入几次才能起作用,然后如果它起作用,则变量 num3 和 den3。

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。

【问题讨论】:

    标签: python oop variables python-3.5


    【解决方案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

    【讨论】:

    • 建议 OP 改用 if ask.lower() in 'bcde' 不是更好的主意吗?
    • @leaf - 这是链接问题的最佳答案。我不想在这里讨论改进输入验证的所有可能方法。
    • 我进行了更改,它们非常适合 if 语句,但现在在它要求分子并输入最后一个之后,它只是变成空白并且分母没有出现,你会碰巧知道为什么吗?
    • @johnsmith - 您的自定义 math 类充满了错误。您可能需要重新访问教程。
    • 我相信错误出在分数课程中,因为它不会到达数学课程开始之前的分母部分。我尝试交换 numer 和 duner 的位置,但我遇到了同样的问题,但只是出现了分母部分而不是分子部分。
    猜你喜欢
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 2013-01-05
    相关资源
    最近更新 更多