简体   繁体   English

Python程序未循环/重启

[英]Python program not looping/restarting

I have a school assessment which is to make a child's spelling game, it has to loop/restart when the player clicks yes. 我有一个学校评估,该评估是一个儿童拼写游戏,当玩家单击“是”时,它必须循​​环/重新启动。 So far when I test the game, the option/the easygui.buttonbox that asks the player if they want to play again and the yes/no options to play again or exit the game dose not appear. 到目前为止,当我测试游戏时,选项/easygui.buttonbox会询问玩家是否要再次玩,是/否选项是再次玩还是退出游戏。 The program just closes after the player final score is displayed. 显示玩家最终得分后,程序立即关闭。

Here is my coding for the game, I can't find what I've done wrong and i had tried 3 suggestions to fix the coding and none of them have worked. 这是我的游戏编码,我找不到做错的东西,我尝试了3条建议来解决编码问题,但都没有奏效。

import easygui
#Childs Litercay Game
#Charlotte Lowe 03/09/2015

#Declare Constants and Variables
Score = 0
PlayerAnswer = 0
playOn = 0
while playOn != "Yes":
    playOn = easygui.buttonbox ("Hey there, are you ready to test your spelling?", choices = ["Yes"])
if "Yes":
    PlayerName = easygui.enterbox ("Before we begin, what's your name?")

easygui.msgbox ("Hi " + PlayerName +"! Here are the rules of the game.")
easygui.msgbox ("There will be 3 words you can choose from, 2 will be incorrect and 1 will be right.")
easygui.msgbox ("All you have to do is select the correctly spelt word.")
easygui.msgbox ("For every right word you pick you will earn a point! There are 10 questions in this quiz")
easygui.msgbox ("Let's begin!")

PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices = ["Awesome","Awsome","Awesom"])
if PlayerAnswer == "Awesome":
    Score += 1
    easygui.msgbox ("You're right! Your score is " + str(Score))
elif PlayerAnswer == "Awsome":
        Score += 0
        easygui.msgbox ("Sorry Incorrect! Your score is " + str(Score))
elif PlayerAnswer == "Awesom":
    Score += 0
    easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
print(Score) #To check if programme is calculating score properly
PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices =["Becuse","Becus","Because"])
if PlayerAnswer == "Becuse":
    Score += 0
    easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
elif PlayerAnswer == "Becus":
    Score += 0
    easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
elif PlayerAnswer == "Because":
    Score += 1
    easygui.msgbox ("Correct! Your score is now " + str(Score))
print(Score) #To check if programme is calculating score properly
PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices =["Morning","Moring","Morening"])
if PlayerAnswer == "Morning":
    Score += 1
    easygui.msgbox ("Well done! Your score is now " + str(Score))
elif PlayerAnswer == "Moring":
     Score += 0
     easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
elif PlayerAnswer == "Morening":
    Score += 0
    easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
print(Score) #To check if programme is calculating score properly
PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices =["Beleave","Believe","Belive"])
if PlayerAnswer == "Believe":
    Score += 1
    easygui.msgbox ("Well done! Your score is now " + str(Score))
elif PlayerAnswer == "Beleave":
     Score += 0
     easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
elif PlayerAnswer == "Belive":
    Score += 0
    easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
print(Score) #To check if programme is calculating score properly
PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices =["Jewelry","Jewlery","Jewley"])
if PlayerAnswer == "Jewelry":
    Score += 1
    easygui.msgbox ("Well done! Your score is now " + str(Score))
elif PlayerAnswer == "Jewlery":
     Score += 0
     easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
elif PlayerAnswer == "Jewley":
    Score += 0
    easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
print(Score) #To check if programme is calculating score properly
PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices =["Mispelled","Misspelled","Misspeled",])
if PlayerAnswer == "Misspelled":
    Score += 1
    easygui.msgbox ("Well done! Your score is now " + str(Score))
elif PlayerAnswer == "Mispelled":
     Score += 0
     easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
elif PlayerAnswer == "Misspeled":
    Score += 0
    easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
print(Score) #To check if programme is calculating score properly    
PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices =["acceptable","aceptable","acceptble",])
if PlayerAnswer == "acceptable":
    Score += 1
    easygui.msgbox ("Well done! Your score is now " + str(Score))
elif PlayerAnswer == "aceptable":
     Score += 0
     easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
elif PlayerAnswer == "acceptble":
    Score += 0
    easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
print(Score) #To check if programme is calculating score properly
PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices =["calendar","calender","callendar",])
if PlayerAnswer == "calendar":
    Score += 1
    easygui.msgbox ("Well done! Your score is now " + str(Score))
elif PlayerAnswer == "calender":
     Score += 0
     easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
elif PlayerAnswer == "callendar":
    Score += 0
    easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
print(Score) #To check if programme is calculating score properly
PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices =["equepment","equiptment","equipment",])
if PlayerAnswer == "equipment":
    Score += 1
    easygui.msgbox ("Well done! Your score is now " + str(Score))
elif PlayerAnswer == "equiptment":
     Score += 0
     easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
elif PlayerAnswer == "equipment":
    Score += 0
    easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
print(Score) #To check if programme is calculating score properly
PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices =["library","liebary","libary",])
if PlayerAnswer == "library":
    Score += 1
    easygui.msgbox ("Well done! Your score is now " + str(Score))
elif PlayerAnswer == "liebary":
     Score += 0
     easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
elif PlayerAnswer == "lieberry":
    Score += 0
    easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
print(Score) #To check if programme is calculating score properly
if Score == 10:
    easygui.msgbox ("You got a score of " + str(Score) + " out of 10, you got them all right " + PlayerName+ "!")
elif Score == 9:
    easygui.msgbox ("You got a score of " + str(Score) + " out of 10, one away " + PlayerName+ "!")
elif Score == 8:
    easygui.msgbox ("You got a score of " + str(Score) + " out of 10, so close "+ PlayerName+"!")
elif Score == 7:
    easygui.msgbox ("You got a score of " + str(Score) + " out of 10, nearly there " + PlayerName+"!")
elif Score == 6:
    easygui.msgbox ("You got a score of " + str(Score) + " out of 10, amlost made it " + PlayerName+ "!")
elif Score == 5:
    easygui.msgbox ("You got a score of " + str(Score) + " out of 10, half way there " + PlayerName+ "!")
elif Score == 4:
    easygui.msgbox ("You got a score of " + str(Score) + " out of 10, a little more pratice " + PlayerName+ "!")
elif Score == 3:
    easygui.msgbox ("You got a score of " + str(Score) + " out of 10, pratice makes perfect "+ PlayerName+"!")
elif Score == 2:
    easygui.msgbox ("You got a score of " + str(Score) + " out of 10, try again " + PlayerName+"!")
elif Score == 1:
    easygui.msgbox ("You got a score of " + str(Score) + " out of 10, better luck next time " + PlayerName+ "!")
elif Score == 0:
    easygui.msgbox ("You got a score of " + str(Score) + "out of 10, better luck next time " + PlayerName+ "!")

while playOn != "Yes":
   playOn = easygui.buttonbox ("Do you want to play again?", choices = ["Yes", "No"])
   if playOn == "Yes":
      Score = 0 #resets score count, if player wants to play again

   elif playOn == "No":
     easygui.msgbox ("Bye for now. Hope you'll play the game again soon!")

I'm hoping someone out in the world wide web can pick up on what I've done wrong. 我希望互联网上的某个人可以了解我做错了什么。 I'm very new to python so any help I can get will be so awesome. 我是python的新手,所以我能得到的任何帮助都会很棒。 I know I have asked for help with this piece of coding before, but I only just made an account today, so I don't know how to reply to any comments or anything! 我知道我之前曾寻求过这段代码的帮助,但是我今天才刚刚注册一个帐户,所以我不知道该如何回复任何评论或其他内容!

You are setting playOn to "Yes" in your first loop. 您在第一个循环playOn设置为"Yes"

while playOn != "Yes":
    playOn = easygui.buttonbox ("Hey there, are you ready to test your spelling?", choices = ["Yes"])
if "Yes":
    PlayerName = easygui.enterbox ("Before we begin, what's your name?")

At the end of the program, you are going into a while loop only while playOn does not equal "Yes" . 在程序结束时,仅当playOn不等于"Yes" ,您才进入while循环。

while playOn != "Yes":
   playOn = easygui.buttonbox ("Do you want to play again?", choices = ["Yes", "No"])
   if playOn == "Yes":
      Score = 0 #resets score count, if player wants to play again

   elif playOn == "No":
     easygui.msgbox ("Bye for now. Hope you'll play the game again soon!")

But, you set (and did not change) playOn at the beginning of your program to "Yes" , so the loop is skipped and the program ends. 但是,您在程序开始时将playOn设置(但未更改)为"Yes" ,因此跳过了循环并结束了程序。


A few notes to help you out 一些注意事项可以帮助您

  • "amlost made it"/"little more pratice"/"pratice makes perfect" - You have some spelling errors in your spell checker program. “ amlost做到了” /“多了一点点” /“实用化了”-您的拼写检查程序中存在一些拼写错误。
  • The program is very verbose and you have a lot of redundant code. 该程序非常冗长,并且您有很多冗余代码。 You mentioned this was a school assignment so I'm not going to provide shorter code samples, but I'd encourage you to look up functions. 您提到这是学校的任务,因此我将不提供较短的代码示例,但我鼓励您查找功能。
  • Even fixing the main issue with playOn , clicking "Yes" isn't going to reset your program. 即使解决了playOn的主要问题,单击“是”也不会重置您的程序。 You still need a way to get to the beginning of your spell check code (hint: functions again are your friend/alternatively an outer loop will also help) 您仍然需要一种方法来到达拼写检查代码的开头(提示:功能再次成为您的朋友/或者,外循环也将有所帮助)

To get it to play again if the user answers yes, you need to put the game in a while loop. 要使它在用户回答“是”时再次播放,您需要将游戏置于while循环中。 With minimal changes to your game, it might look like: 只需对游戏进行最小的更改,它看起来就可能像:

import easygui
#Childs Litercay Game
#Charlotte Lowe 03/09/2015

#Declare Constants and Variables
Score = 0
PlayerAnswer = 0
playOn = 0
while playOn != "Yes":
    playOn = easygui.buttonbox ("Hey there, are you ready to test your spelling?", choices = ["Yes"])
if "Yes":
    PlayerName = easygui.enterbox ("Before we begin, what's your name?")

easygui.msgbox ("Hi " + PlayerName +"! Here are the rules of the game.")
easygui.msgbox ("There will be 3 words you can choose from, 2 will be incorrect and 1 will be right.")
easygui.msgbox ("All you have to do is select the correctly spelt word.")
easygui.msgbox ("For every right word you pick you will earn a point! There are 10 questions in this quiz")
easygui.msgbox ("Let's begin!")

while True:
    PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices = ["Awesome","Awsome","Awesom"])
    if PlayerAnswer == "Awesome":
        Score += 1
        easygui.msgbox ("You're right! Your score is " + str(Score))
    elif PlayerAnswer == "Awsome":
            Score += 0
            easygui.msgbox ("Sorry Incorrect! Your score is " + str(Score))
    elif PlayerAnswer == "Awesom":
        Score += 0
        easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    print(Score) #To check if programme is calculating score properly
    PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices =["Becuse","Becus","Because"])
    if PlayerAnswer == "Becuse":
        Score += 0
        easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    elif PlayerAnswer == "Becus":
        Score += 0
        easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    elif PlayerAnswer == "Because":
        Score += 1
        easygui.msgbox ("Correct! Your score is now " + str(Score))
    print(Score) #To check if programme is calculating score properly
    PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices =["Morning","Moring","Morening"])
    if PlayerAnswer == "Morning":
        Score += 1
        easygui.msgbox ("Well done! Your score is now " + str(Score))
    elif PlayerAnswer == "Moring":
         Score += 0
         easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    elif PlayerAnswer == "Morening":
        Score += 0
        easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    print(Score) #To check if programme is calculating score properly
    PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices =["Beleave","Believe","Belive"])
    if PlayerAnswer == "Believe":
        Score += 1
        easygui.msgbox ("Well done! Your score is now " + str(Score))
    elif PlayerAnswer == "Beleave":
         Score += 0
         easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    elif PlayerAnswer == "Belive":
        Score += 0
        easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    print(Score) #To check if programme is calculating score properly
    PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices =["Jewelry","Jewlery","Jewley"])
    if PlayerAnswer == "Jewelry":
        Score += 1
        easygui.msgbox ("Well done! Your score is now " + str(Score))
    elif PlayerAnswer == "Jewlery":
         Score += 0
         easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    elif PlayerAnswer == "Jewley":
        Score += 0
        easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    print(Score) #To check if programme is calculating score properly
    PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices =["Mispelled","Misspelled","Misspeled",])
    if PlayerAnswer == "Misspelled":
        Score += 1
        easygui.msgbox ("Well done! Your score is now " + str(Score))
    elif PlayerAnswer == "Mispelled":
         Score += 0
         easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    elif PlayerAnswer == "Misspeled":
        Score += 0
        easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    print(Score) #To check if programme is calculating score properly____
    PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices =["acceptable","aceptable","acceptble",])
    if PlayerAnswer == "acceptable":
        Score += 1
        easygui.msgbox ("Well done! Your score is now " + str(Score))
    elif PlayerAnswer == "aceptable":
         Score += 0
         easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    elif PlayerAnswer == "acceptble":
        Score += 0
        easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    print(Score) #To check if programme is calculating score properly
    PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices =["calendar","calender","callendar",])
    if PlayerAnswer == "calendar":
        Score += 1
        easygui.msgbox ("Well done! Your score is now " + str(Score))
    elif PlayerAnswer == "calender":
         Score += 0
         easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    elif PlayerAnswer == "callendar":
        Score += 0
        easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    print(Score) #To check if programme is calculating score properly
    PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices =["equepment","equiptment","equipment",])
    if PlayerAnswer == "equipment":
        Score += 1
        easygui.msgbox ("Well done! Your score is now " + str(Score))
    elif PlayerAnswer == "equiptment":
         Score += 0
         easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    elif PlayerAnswer == "equipment":
        Score += 0
        easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    print(Score) #To check if programme is calculating score properly
    PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices =["library","liebary","libary",])
    if PlayerAnswer == "library":
        Score += 1
        easygui.msgbox ("Well done! Your score is now " + str(Score))
    elif PlayerAnswer == "liebary":
         Score += 0
         easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    elif PlayerAnswer == "lieberry":
        Score += 0
        easygui.msgbox ("Sorry Incorrect! Your score is still " + str(Score))
    print(Score) #To check if programme is calculating score properly
    if Score == 10:
        easygui.msgbox ("You got a score of " + str(Score) + " out of 10, you got them all right " + PlayerName+ "!")
    elif Score == 9:
        easygui.msgbox ("You got a score of " + str(Score) + " out of 10, one away " + PlayerName+ "!")
    elif Score == 8:
        easygui.msgbox ("You got a score of " + str(Score) + " out of 10, so close "+ PlayerName+"!")
    elif Score == 7:
        easygui.msgbox ("You got a score of " + str(Score) + " out of 10, nearly there " + PlayerName+"!")
    elif Score == 6:
        easygui.msgbox ("You got a score of " + str(Score) + " out of 10, amlost made it " + PlayerName+ "!")
    elif Score == 5:
        easygui.msgbox ("You got a score of " + str(Score) + " out of 10, half way there " + PlayerName+ "!")
    elif Score == 4:
        easygui.msgbox ("You got a score of " + str(Score) + " out of 10, a little more pratice " + PlayerName+ "!")
    elif Score == 3:
        easygui.msgbox ("You got a score of " + str(Score) + " out of 10, pratice makes perfect "+ PlayerName+"!")
    elif Score == 2:
        easygui.msgbox ("You got a score of " + str(Score) + " out of 10, try again " + PlayerName+"!")
    elif Score == 1:
        easygui.msgbox ("You got a score of " + str(Score) + " out of 10, better luck next time " + PlayerName+ "!")
    elif Score == 0:
        easygui.msgbox ("You got a score of " + str(Score) + "out of 10, better luck next time " + PlayerName+ "!")

    playOn = easygui.buttonbox ("Do you want to play again?", choices = ["Yes", "No"])
    if playOn == "Yes":
       Score = 0 #resets score count, if player wants to play again
    elif playOn == "No":
      easygui.msgbox ("Bye for now. Hope you'll play the game again soon!")
      break

A simpler form 较简单的形式

Computers are better at repetitive things than humans. 计算机比人类更擅长重复性工作。 The code below is modified to take advantage of that: 修改下面的代码以利用它:

import easygui
#Childs Litercay Game
#Charlotte Lowe 03/09/2015

def play(choices, answer, Score):
    """Check spelling."""
    PlayerAnswer = easygui.buttonbox ("Which word is spelt correctly?", choices=choices)
    if PlayerAnswer == choices[answer]:
        Score += 1
        easygui.msgbox ("You're right! Your score is " + str(Score))
    else:
        easygui.msgbox ("Sorry Incorrect! Your score is " + str(Score))
    return Score
#    print(Score) #To check if programme is calculating score properly

tests = (
        (["Awesome","Awsome","Awesom"], 0),
        (["Becuse","Becus","Because"], 2),
        (["Morning","Moring","Morening"], 0),
        (["Beleave","Believe","Belive"], 1),
        (["Jewelry","Jewlery","Jewley"], 0),
        # Fill in the rest.....
    )

congrats = {
        10:"you got them all right ",
        9:"one away",
        8:"so close",
        7:"nearly there",
        6:"amlost made it",
        5:"half way there",
        4:"a little more pratice",
        3:"pratice makes perfect",
        2:"try again",
        1:"better luck next time",
        0:"better luck next time",
}

# Hello and instructions
playOn = easygui.buttonbox ("Hey there, are you ready to test your spelling?", choices = ["Yes"])
PlayerName = easygui.enterbox ("Before we begin, what's your name?")
easygui.msgbox ("Hi " + PlayerName +"! Here are the rules of the game.")
easygui.msgbox ("There will be 3 words you can choose from, 2 will be incorrect and 1 will be right.")
easygui.msgbox ("All you have to do is select the correctly spelt word.")
easygui.msgbox ("For every right word you pick you will earn a point! There are 10 questions in this quiz")
easygui.msgbox ("Let's begin!")

while True:
    Score = 0
    for choices, answer in tests:
        Score = play(choices, answer, Score)
        print(Score) #To check if programme is calculating score properly
    easygui.msgbox (congrats[Score] +" " + PlayerName+ "!")

    playOn = easygui.buttonbox ("Do you want to play again?", choices = ["Yes", "No"])
    if playOn == "No":
      easygui.msgbox ("Bye for now. Hope you'll play the game again soon!")
      break

Notes: 笔记:

  • The code for giving the user three choices and updating the score now appears once in a function that is called many times for each set of choices. 现在,在为每个选择集多次调用的函数中,为用户提供三个选择并更新分数的代码出现一次。

  • The code summing up the users performance is reduced to a few line which get the words of encouragement from a dictionary. 总结用户性能的代码减少到几行,这从字典中得到了鼓励。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM