我正在学习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 except
(stavros
房间)。你知道吗
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()
首先:
stavros
在parts
中调用,后者在brass_or_wood
中调用。在brass_or_wood
中,您有一个无限循环,包含a=0
和while 1>a
(顺便说一下,您可以将其缩短为while 1:
)。你永远不会改变,所以这永远不会结束。一旦stavros
完成运行,代码将返回到在parts
中调用它的位置,该位置完成运行并返回到在brass_or_wood
中调用它的位置。然后它完成循环的迭代,并提示为bow
输入更多信息。如果你没有选择'brass'
或'windwood'
,它会转到else
块,提醒你选择黄铜或木管乐器(“风木”)。使用break
打破循环:对于程序中的任何其他类似循环,也应该这样做。你知道吗
第二:
bb_room
有一个try
,在这里你调用flats_room
,在这里你调用brass_or_wood
,在这里你调用parts
,在这里你调用stavros
。输入一个非整数,您将一直返回到try
。你知道吗如果在任何一个程序中得到
ValueError
,基本上是在程序中的任何地方,因为bb_room
几乎立即被调用,那么异常将向上传递,寻找处理程序。它将在bb_room
的try..except
中找到处理程序并生成您看到的结果。你知道吗相关问题 更多 >
编程相关推荐