猿问

python的新手需要使用while循环的帮助

该分配:


用 Python 编写一个交互式应用程序,向用户显示一个简单的菜单。让他们选择男孩 (b)、女孩 (g)或退出 (q)退出程序。程序应该一直循环直到用户选择退出。此应用程序将使用循环和条件来完成任务。您的程序应输出男孩的平均分数和女孩的平均分数。


该代码:


 letter= input(" type (b) for Boy (g) for Girl or (q) for quit")

 boycount= 0

 girlcount=0



while(letter != 'q'):

   if  letter == 'b':

       print("Enter score for boy")

       scoreB= float(input())

       boycount = boycount +1

       letter=input(" type (b) for Boy (g) for Girl or (q) for quit")


if letter == 'g':

    print("enter score fo Girl")

    scoreG = float(input())

    girlcount= girlcount +1

    letter=input(" type (b) for Boy (g) for Girl or (q) for quit")


else:


   print("the average for the girls is",scoreG/girlcount)

   print("the average for the boys is",scoreB/boycount)

不知道如何做 python 新手。我了解我需要做什么以及我收到的错误消息,但在 python 中实现它是我陷入困境的地方。


我得到的错误:在为 b 输入一个值并尝试为 bi 输入另一个值后得到一个错误,说 scoreG 未定义


30秒到达战场
浏览 212回答 2
2回答

慕莱坞森

实际上,最大的问题是缩进。这应该有效:letter= input(" type (b) for Boy (g) for Girl or (q) for quit")boycount= 0girlcount=0scoreB = 0scoreG = 0while True:   if  letter == 'b':       print("Enter score for boy")       scoreB += float(input())       boycount = boycount +1       letter=input(" type (b) for Boy (g) for Girl or (q) for quit")   elif letter == 'g':       print("enter score fo Girl")       scoreG += float(input())       girlcount= girlcount +1       letter=input(" type (b) for Boy (g) for Girl or (q) for quit")   elif letter == 'q':       print("the average for the girls is",scoreG/girlcount)       print("the average for the boys is",scoreB/boycount)       exit()

慕森王

这确实是一个缩进问题(或逻辑流程问题)。对于大多数编程语言来说这无关紧要,但在 python 中却是必不可少的。这是您的代码实际执行的操作:# initialize boycount and girlcountwhile(letter != 'q'):    # do some stuff inside the while loop    # do some stuff inside the while loop    if letter == 'b':        # increment boycount    # do some stuff inside the while loop# do some stuff after the while loop# letter must be 'q' now that the while loop endedif letter == 'g':    # increment girlcount    # this will never happen, because letter cannot be 'g' hereelse:    # print summary    # this will always happen because letter is 'q'这是您的代码应该执行的操作:# initialize boycount and girlcountwhile(letter != 'q'):    # do some stuff inside the while loop    # do some stuff inside the while loop    if letter == 'b':        # increment boycount    if letter == 'g':        # increment girlcount    # do some stuff inside the while loop# do some stuff after the while loop# letter must be 'q' now that the while loop ended# print summary与大多数其他编程语言不同,python 需要缩进来定义复合语句块的范围。我有时会使用pass带有注释的什么都不做的语句来表明我的意图:# initialize boycount and girlcountwhile(letter != 'q'):    # do some stuff inside the while loop    if letter == 'b':        # increment boycount    pass # end if    if letter == 'g':        # increment girlcount    pass # end ifpass # end while# print summary该pass语句只是一个什么都不做的占位符,但它可以帮助我使预期的控制流程更清晰,并且可以帮助我检测设计错误。您可以使用的另一个诊断工具是 print() 语句。# initialize boycount and girlcountprint("start of while letter loop")while(letter != 'q'):    # do some stuff inside the while loop    if letter == 'b':        print("letter b: increment boycount")        # increment boycount    pass # end if    if letter == 'g':        print("letter g: increment girlcount")        # increment girlcount    pass # end ifpass # end whileprint("end of while letter loop")# print summary当您测试包含这些打印语句的程序时,您将能够确认每个命令都按照您的预期执行。在验证逻辑有效后,您只需#在打印语句前放置一个即可将其转换为注释。为了完整起见,官方python教程提到循环体是缩进的:缩进是 Python 对语句进行分组的方式
随时随地看视频慕课网APP

相关分类

Python
我要回答