1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Python 3 Question

  1. Sep 23, 2014 #1
    1. The problem statement, all variables and given/known data

    You're going to create some medical diagnoses software. You are going to ask the user if they have a fever, a rash, if they have a stuffy nose, and if their ear hurts, and give one of the following responses:
    1. Don't have a fever and don't have a stuffy nose: Hypochondriac
    2. Don't have a fever and have a stuffy nose: Head Cold
    3. Have a fever, don't have a rash, and ear hurts: Ear Infection
    4. Have a fever, don't have a rash, and ear doesn't hurt: Flu
    5. Have a fever and have a rash: Measles
    Sample output:
    Do you have a fever? (y/n): y
    Do you have a rash? (y/n): n
    Does your ear hurt? (y/n): y
    Diagnosis: You have an ear infection.

    Note that the user should only ever have to enter lower case y or lower case n. Deviation from this will result in loss of points. The user will only ever enter 'y' or 'n', and you should ASK THE MINIMUM NUMBER OF QUESTIONS REQUIRED.

    3. The attempt at a solution

    I have the program written so it asks all four questions (fever, rash, stuffy nose, and ear pain) all of the time and makes he diagnosis. For example for the sample output above in part 1 mine would say:

    Do you have a fever? (y/n): y
    Do you have a rash? (y/n): n
    Does your ear hurt? (y/n): y
    Do you have a stuffy nose? (y/n): (Input doesn't matter)
    Diagnosis: You have an ear infection.

    How would I go about telling it that if it has enough info to make a diagnosis to not ask any more questions. For example, if you put "y" for fever and "y" for rash it won't ask for ear pain and stuffy nose?

    Here is what I have:

    def main ():

    #User answers questions
    fever = input("Do you have a fever? (y/n): ")
    rash = input("Do you have a rash? (y/n): ")
    ear = input("Does your ear hurt? (y/n): ")
    nose = input("Do you have a stuffy nose? (y/n): ")

    #Replies to the user about medical issues
    if (fever == "n" and nose == "n"):
    print("Diagnosis: You are a hypochondriac.")
    elif (fever == "n" and nose =="y"):
    print("Diagnosis: You have a head cold.")
    elif (fever == "y" and rash == "n" and ear == "y"):
    print("Diagnosis: You have an ear infection.")
    elif (fever == "y" and rash == "n" and ear == "n"):
    print("Diagnosis: You have the flu.")
    elif (fever == "y" and rash == "y"):
    print("Diagnosis: You have measles.")

    main ()

    Thanks in advance for your input.
  2. jcsd
  3. Sep 23, 2014 #2
    Sorry about the spacing and conventions. In the program window all of the spacing and and indentations are correct.
  4. Sep 24, 2014 #3


    User Avatar

    Staff: Mentor

    You should ask questions in the loop and after reading each single input you have to test the answers against known list of symptoms.

    I feel like using simple system of == like you are trying to do goes against the flexibility of the Python and its built in data types (and makes later modifications a nightmare).

    Best way of formatting code is with code tags. Sorry, can't show you how, I am getting Java errors ATM. System is still not 100% stable after the move.
  5. Sep 24, 2014 #4

    D H

    User Avatar
    Staff Emeritus
    Science Advisor

    That's a bit overkill for this simple problem. It's easy to hand-construct a series of questions and responses that minimizes the number of questions to be asked. There's no need for a loop.

    DustyGeneral, you need to ask questions in an order such that each question is pertinent to remaining possibilities. The order in which you ask questions is important. The optimal first question will do the best job of reducing the number of possible diagnoses by 1/2. With five diagnoses, you can't quite do that; the best you can do is eliminate two or three of the diagnoses. On the other hand, making stuffy nose the first question is a bad idea. This will eliminate at most one possibility.
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted