【发布时间】:2012-09-10 01:55:35
【问题描述】:
为学习目的构建一个简单的“石头、剪子、布”的 Python 游戏。
我在这里阅读了其他一些关于退出 Python 而没有回溯的帖子。我正在尝试实现它,但仍然得到追溯!一些 Python 奇才可以指出这个 Python 假人有什么问题吗?这个想法是单击 RETURN(或键入“yes”或“y”将使程序再次运行 play(),但按 CTRL-C 将关闭它而不会回溯。我使用的是 Python 2.7。
# modules
import sys, traceback
from random import choice
#set up our lists
ROCK, PAPER, SCISSORS = 1, 2, 3
names = 'ROCK', 'PAPER', 'SCISSORS'
#Define a function for who beats who?
def beats(a, b):
return (a,b) in ((PAPER, ROCK), (SCISSORS, PAPER), (ROCK, SCISSORS))
def play():
print "Please select: "
print "1 Rock"
print "2 Paper"
print "3 Scissors"
# player choose Rock, Paper or Scissors
player_choice = int(input ("Choose from 1-3: "))
# assigns the CPU variable a random CHOICE from a list.
cpu_choice = choice((ROCK, PAPER, SCISSORS))
if cpu_choice != player_choice:
if beats(player_choice, cpu_choice):
print "You chose %r, and the CPU chose %r." % (names[player_choice - 1], names[cpu_choice - 1])
print "You win, yay!!"
else:
print "You chose %r, and the CPU chose %r." % (names[player_choice - 1], names[cpu_choice - 1])
print "You lose. Yuck!"
else:
print "You chose %r, and the CPU chose %r." % (names[player_choice - 1], names[cpu_choice - 1])
print "It's a tie!"
print "Do you want to play again? Click RETURN to play again, or CTRL-C to exit!"
next = raw_input("> ")
# THIS IS WHAT I'M WORKING ON - NEED TO REMOVE TRACEBACK!
if next == "yes" or "y":
try:
play()
except KeyboardInterrupt:
print "Goodbye!"
except Exception:
traceback.print_exc(file=sys.stdout)
sys.exit(0)
elif next == None:
play()
else:
sys.exit(0)
# initiate play() !
play()
【问题讨论】:
-
你能告诉我们你的追溯吗?
-
我在这里第一次看到这种没有回溯的退出代码:stackoverflow.com/questions/1187970/…,但不同的是现在我试图在 if-elif-else 语句中使用它...跨度>
-
你能把你的输出粘贴到这里吗?我无法重现。此外,您的代码不会像您的问题中复制的那样运行。你需要定义
play()和next -
另外,
exit(0)应该是sys.exit(0)。 -
小心你的 if 语句。
a = 'n'; bool(a == 'yes' or 'y')返回True
标签: python python-2.7 exit traceback