1

ユーザーの性別を見つけようとしています。これはその関数の私のコードです:

def getGender():
"""figure out the gender of the person."""
gender = input("Are you male or female? (m/f)").lower()
while gender != "m" or "f":
    gender = input("Are you male or female? (m/f)").lower()

return gender

実行すると、有効な応答を入力しても、ループに陥り続けます。これはメインコードです:

def main():
    welcome()
    getGender()
    if gender == "m":
        maleCalc()
        maleFinding()
    else:
        femaleCalc()
        femFinding()
    disclaimer()

#run the program
main()
input("\n\nPress the enter key to exit.")

問題が関数の while ループにあるのか、それとも全体的なロジックの問題なのかを突き止めようとしています。

助けてくれてありがとう。

4

2 に答える 2

1

1 つの問題は次のセクションにあります。

gender != "m" or "f"

Python では "m" と "f" の両方が true として扱われるため、!= は or よりも強く結合するため、これは以下と同じです。

(gender != "m") or "f"

これは常に真実です。

代わりに試してください:

while gender != "m" or gender != "f":

また

while gender not in ("m", "f"):
于 2013-08-15T23:17:01.683 に答える
1

問題は、文字のチェックにあります。gender != 'm'現在、2 つのステートメントをチェックしていますが、2 番目のステートメント"f"は空ではないため、常に真です。代わりに、次のようなものを試してください。

while (gender != "m") and (gender != "f"):

または同様に:

while gender not in ["m", "f"]:

したがって、全体として、関数全体を次のように変更することをお勧めします。

def getGender():
    """figure out the gender of the person."""
    gender = ""
    while gender not in ["m", "f"]:
        gender = input("Are you male or female? (m/f)").lower()

    return gender
于 2013-08-15T23:17:47.340 に答える