0

このコードは機能しますが、可能な限り効率的ではありません。より効果的にする方法を教えてください。それほど多くの機能がないと思いますが、その方法を忘れてしまいました。台本は複数選択クイズです。各質問を新しい関数として定義しました。これはこれを行うための最良の方法ですか?

def firstq (): # 1st Question
    global q1list,answer1
    q1list = ["Wellington","Auckland","Motueka","Masterton"]
    q1count = 0
    print ("Question 1")
    print ("From which of the following Towns is the suburb NEWLANDS located?")
    while q1count < 4:
        print (q1count,"  ",q1list[q1count])
        q1count = q1count + 1
    answer1 = int(input("What number answer do you choose?"))
    if answer1 == 0: print ("Correct answer!")
    elif answer1 != 0: print ("Sorry! Incorrect Answer. Better luck with the next Question.")
    print("Next Question below:")
    print(" ")
    print(" ")



def secq (): #Second Question
    global q2list,answer2 # Makes answer2 and q2list avalible anywhere on the page.
    q2list = ["Wellington","Christchurch","Pairoa","Dunedin"] # List of answers to choose from.
    q2count = 0 # defines what the q2 count is. SEE BELOW
    print ("Question 2")# prints "question 2"
    print ("What NZ town is known for L&P?") # Prints the question
    while q2count < 4:
        print (q2count,"  ",q2list[q2count]) # Whilst the number of answers (q2list) is below 4 it will print the next answer.
        q2count = q2count + 1
    answer2 = int(input("What number answer do you choose?")) # asks for answer
    if answer2 == 2: print ("Correct answer!") # If answer is correct, prints "Correct answer"
    elif answer2 != 2: print ("Sorry! Incorrect Answer. Better luck with the next Question.") # If answer is correct, prints "Sorry! Incorrect Answer. Better luck with the next Question."
    print("Next Question below:") # prints "Next Question
    # these provide spacing!
    print(" ")
    print(" ")


def thrq ():
    global q3list,answer3
    q3list = ["Lewis Carroll","J.K. Rowling","Louis Carroll","Other"]
    q3count = 0
    print ("Question 3")
    print ("Who wrote the book Alice In Wonderland?")
    while q3count < 4:
        print (q3count,"  ",q3list[q3count])
        q3count = q3count + 1
    answer3 = int(input("What number answer do you choose?"))
    if answer3 == 0: print ("Correct answer!")
    elif answer3 != 0: print ("Sorry! Incorrect Answer. Better luck with the next Question.")
    print("Next Question below:")
    print(" ")
    print(" ")

def fouq ():
    global q4list,answer4
    q4list = ["WA","DC","WD","WC"]
    q4count = 0
    print ("Question 4")
    print ("What is the abbreviation for Washington?")
    while q4count < 4:
        print (q4count,"  ",q4list[q4count])
        q4count = q4count + 1
    answer4 = int(input("What number answer do you choose?"))    
    if answer4 == 1: print ("Correct answer!")
    elif answer4 != 1: print ("Sorry! Incorrect Answer. Better luck with the next Question.")
    print("Next Question below:")
    print(" ")
    print(" ")

def fivq ():
    global q5list,answer5
    q5list = ["Yes","No, they're found around New Zealand","No","No, they're found around the UK"]
    q5count = 0
    print ("Question 5")
    print ("Are walruses found in the South Pole?")
    while q5count < 4:
        print (q5count,"  ",q5list[q5count])
        q5count = q5count + 1
    answer5 = int(input("What number answer do you choose?"))
    if answer5 == 2: print ("Correct answer!")
    elif answer5 != 2: print ("Sorry! Incorrect Answer. Better luck with the next Question.")
    print("Next Question below:")
    print(" ")
    print(" ")

def sixq ():
    global q6list,answer6
    q6list = ["G.M.","General M's","G Motors","Grand Motors"]
    q6count = 0
    print ("Question 6")
    print ("What is the other name for General Motors?")
    while q6count < 4:
        print (q6count,"  ",q6list[q6count])
        q6count = q6count + 1
    answer6 = int(input("What number answer do you choose?"))    
    if answer6 == 0: print ("Correct answer!")
    elif answer6 != 0: print ("Sorry! Incorrect Answer. Better luck with the next Question.")
    print("Next Question below:")
    print(" ")
    print(" ")

def sevq ():
    global q7list,answer7
    q7list = ["Greece","USA","Egypt","Italy"]
    q7count = 0
    print ("Question 7")
    print ("Which of the following countries were cats most honored in?")
    while q7count < 4:
        print (q7count,"  ",q7list[q7count])
        q7count = q7count + 1
    answer7 = int(input("What number answer do you choose?"))
    if answer7 == 2: print ("Correct answer!")
    elif answer7 != 2: print ("Sorry! Incorrect Answer. Better luck with the next Question.")
    print("Next Question below:")
    print(" ")
    print(" ")

def eigq ():
    global q8list,answer8
    q8list = ["I find","I see","I presume","I am"]
    q8count = 0
    print ("Question 8")
    print ("Complete this phrase-Dr. Livingstone,")
    while q8count < 4:
        print (q8count,"  ",q8list[q8count])
        q8count = q8count + 1
    answer8 = int(input("What number answer do you choose?"))       
    if answer8 == 2: print ("Correct answer!")
    elif answer8 != 2: print ("Sorry! Incorrect Answer. Better luck with the next Question.")

    print(" ")
    print(" ")

def end():
    if answer1 == 0 and answer2 == 2 and answer3 == 0 and answer4 ==1 and answer5 ==2 and answer6 ==0 and answer7 == 2 and answer8 == 2: print("YAY, all questions correct! You have won the 1 million!")
    else: print("Sorry you have some incorrect questions! You have not won any money! :(") # If all answers are correct, this will display YAY, all questions correct! You have won the 1 million! If not it will print Sorry you have some incorrect questions! You have not won any money! :(.


def printorder ():
    # Defines ther order that it will be printed in
    firstq()
    secq()
    thrq()
    fouq()
    fivq()
    sixq()
    sevq()
    eigq()
    end()

name = l" " # while name is blank it will continue
while name != "quit": #While the name is not quit it will continue. If name is quit it will stop.
    print ("The $1,000,000 Quiz! Can you win the 1 Million?")#Prints Welcome Message
    name = input("Lets Get Started! What is your name: ")# asks for name
    if name == "quit": 
       break # if the name is quit it will stop if not....
    printorder()# ....prints printorder
4

1 に答える 1

2

これは単なるポインタです。

それ以外の

def sixq():
    global q6list, answer6
    ...

関数を作成する

def question(qlist, qanswer):
    ...    

qlistandをパラメーターとして渡すとqanswer、コードの多くが重複するため、この方法で削除できます。globalまた、同時に sの使用も排除します。を使用して、この関数の最後で呼び出しコードに必要な値を返すことができますreturn。(Python では複数の値を返すことができることに注意してください)

必要に応じて上記を調整します。つまり、別のパラメーターを指定する必要がある場合などです。基本的に、重複するコードを単一の関数に分解し、それを一意にするために必要なパラメーターを提供します。

最後に、8 つの代わりに 1 つの関数を使用すると、コードの保守がはるかに簡単になります。コードに問題が見つかった場合、または単に何かを変更したい場合、8 つの異なる関数ではなく、1 か所で修正するだけで済みます..これは大きなメリットです。

于 2012-11-25T22:42:28.637 に答える