在Python上意外使用try except

2024-09-26 22:54:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习python,我正在尝试制作一个类似游戏的房间类型,它只有问题。 我在ubuntu14.04上使用python2.7

完成游戏有两种方法,没有死胡同。你知道吗

bb_room->flats_room->brass_or_wood->parts->stavros

bb_room->sharps_room->parts->stavros

我发布了整个代码,我有一些问题:

第一名

如果我在到达stavros房间时选择第一条路径,回答一个数字并打印正确的答案,在我按回车键后,它会向我询问

flats or sharps

如果你回答BBU室的第一个问题。你知道吗

当我选择第二条路时,当我完成并按上面的回车键时,它会要求我

brass or woodwind

我不明白这是怎么回事!你知道吗

第二名

为什么当我再次来到stavros房间,给一个字母而不是一个整数时,它会打印

Oops! That was no valid number. Try again...

Press Enter to continue...

重新开始。此时我没有使用try exceptstavros房间)。你知道吗

from sys import exit
import webbrowser
import os


def bb_room():
    print ("Play the Bb major \n(write the positions with spaces between)")
    positions=raw_input(prompt)
    positions_list=positions.split()
    try:
        positions_list=[int(a) for a in positions_list]
        if positions_list == [1,6,4,3,1,4,2,1]:
            print "\nYou right.."
            print "Do you like flats or sharps?"

            a=0
            while 1>a:
                fors=raw_input(prompt)
                fors=fors.lower()
                if fors=="flats":                   
                    flats_room()
                elif fors=="sharps":                    
                    sharps_room()
                else:
                    print "Choose flats or sharps"

        else:
            dead("You don't know the basics.")
    except ValueError:
        print "Oops!  That was no valid number.  Try again..."
        raw_input("Press Enter to continue...")
        os.system('clear')
        start()

def flats_room():
    print ("\nHow many flats Db major has?")    
    flats=raw_input(prompt)
    flats=flats.lower()
    if flats=="5" or flats=='five':
        print "That's right!"
        brass_or_wood()
    else:
        dead("You should learn some music theory.")

def sharps_room():
    print ("\nHow many sharps E major has?")
    sharps=raw_input(prompt)
    sharps=sharps.lower()
    if sharps=="4" or sharps=='four':
        print "That's right!"
        parts()
    else:
        dead("You should learn some music theory.") 

def brass_or_wood():
    print ("\nWhat kind of instrument a trombone is?\nBrass or Windwood?")  
    a=0
    while 1>a:
        bow=raw_input(prompt)
        bow=bow.lower()
        if bow=="brass":
            print "That's right!"
            parts()
        elif bow=="windwood":
            webbrowser.open("https://www.youtube.com/watch?v=X2WH8mHJnhM",new=0,autoraise=True)
            dead("Go play some recorder!")      
        else:
            print "Choose Brass or Windwood!"

def parts():
    print ("\nHow many parts a trombone has?")  
    parts=raw_input(prompt)
    parts=parts.lower()
    if parts=="4" or parts=='four':
        print "That's right!"
        stavros()
    else:
        dead("You should learn some stuff about the bone.") 

def stavros():
    print ("\nYou meet Stavros at Politistiko and of course you are unprepared\nfor your lesson. How many points you lose?")    
    points=raw_input(prompt)
    points=int(points)
    if points > 0 and points <100:
        print ("You guessed right. %d is the right amount you deserve to loose" % points)           
    elif points < 0:
        print ("You can't lose a negative number cause you 'll add it!")            
    elif points >100:
        print ("Don't be so hard with yourself. Stavros is not a bad guy")          
    else:
        print ("You should put a number")

def start():
    print ("Welcome to the Trombone game.\n\n") 
    bb_room()

def dead(why):
    print why, "Start practising!"
    raw_input("Press Enter to continue...")
    os.system('clear')
    start()

prompt="> "
start()

Tags: orrightinputrawifdefpromptpoints
1条回答
网友
1楼 · 发布于 2024-09-26 22:54:19

首先:

stavrosparts中调用,后者在brass_or_wood中调用。在brass_or_wood中,您有一个无限循环,包含a=0while 1>a(顺便说一下,您可以将其缩短为while 1:)。你永远不会改变,所以这永远不会结束。一旦stavros完成运行,代码将返回到在parts中调用它的位置,该位置完成运行并返回到在brass_or_wood中调用它的位置。然后它完成循环的迭代,并提示为bow输入更多信息。如果你没有选择'brass''windwood',它会转到else块,提醒你选择黄铜或木管乐器(“风木”)。使用break打破循环:

while 1:
    bow=raw_input(prompt)
    bow=bow.lower()
    if bow=="brass":
        print "That's right!"
        parts()
        break
    elif bow=="windwood":
        dead("Go play some recorder!")
        break
    else:
        print "Choose Brass or Windwood!"

对于程序中的任何其他类似循环,也应该这样做。你知道吗

第二:

bb_room有一个try,在这里你调用flats_room,在这里你调用brass_or_wood,在这里你调用parts,在这里你调用stavros。输入一个非整数,您将一直返回到try。你知道吗

如果在任何一个程序中得到ValueError,基本上是在程序中的任何地方,因为bb_room几乎立即被调用,那么异常将向上传递,寻找处理程序。它将在bb_roomtry..except中找到处理程序并生成您看到的结果。你知道吗

相关问题 更多 >

    热门问题