我从一本书 Invent With Python 中得到了这个猜谜游戏的灵感。我不喜欢原始脚本没有涵盖重新猜测数字或错误使用不在 1 - 20 范围内的数字的可能性,所以我修改了它。该程序运行良好,但是,我只是在思考 if/elif/else 代码块。
我想重写脚本而不必在 if 中嵌套和 if。我什至无法开始思考如何做到这一点。任何人都可以帮助我——只要举一个例子说明这个程序如何在没有嵌套的情况下工作就太好了!
这是完整的小脚本:
from random import randint
from sys import exit
name = raw_input("Hello! What's your name? ")
print "Well %s, I'm thinking of a number between 1 and 20." % name
print "Since I'm a benevolent computer program, I'll give you 6 guesses."
secret_number = randint(1, 20)
guesses_left = 6
already_guessed = []
while guesses_left > 0:
try:
guess = int(raw_input("Take a guess: "))
if guess >= 1 and guess <= 20 and guess not in already_guessed:
already_guessed.append(guess)
guesses_left -= 1
if guess == secret_number:
print "You win! %d was my secret number!" % secret_number
exit(0)
elif guess < secret_number:
print "Your guess is too low!"
elif guess > secret_number:
print "Your guess is too high!"
elif guess in already_guessed:
print "You already guessed that!"
else:
print "Not a number between 1 - 20!"
print "Please try again!"
print "You have %d guesses left!" % guesses_left
except ValueError:
print "Invalid input! Please try again!"
请您参考如下方法:
像这样尝试,使用 continue 退出循环的当前迭代并在循环顶部重新开始。
你这里也有一个逻辑错误:
if guess <= 1 and guess >= 20 and guess not in already_guessed:
一个数字不可能既小于或等于 1,又大于或等于 20。您的 and 应该是这样的 or:
if (guess <= 1 or guess >= 20) and guess not in already_guessed:
或者更简单:
if 1 <= guess <= 20 and guess not in already_guessed:
另外,让你的 try/except 只围绕实际可能引发异常的事情(或者如果发生异常则不应该发生:
from random import randint
import sys
name = raw_input("Hello! What's your name? ")
print "Well {}, I'm thinking of a number between 1 and 20.".format(name)
print "Since I'm a benevolent computer program, I'll give you 6 guesses."
secret_number = randint(1, 20)
guesses_left = 6
already_guessed = []
while guesses_left > 0:
print "You have {} guesses left!".format(guesses_left)
try:
guess = int(raw_input("Take a guess: "))
except ValueError:
print "Invalid input! Please try again!\n"
continue
# If the number is not between 1 and 20...
if not (1 <= guess <= 20):
print "Not a number between 1 - 20!"
print "Please try again!\n"
continue
if guess in already_guessed:
print "You already guessed that!\n"
continue
guesses_left -= 1
already_guessed.append(guess)
if guess == secret_number:
print "You win! {} was my secret number!".format(secret_number)
sys.exit(0)
elif guess < secret_number:
print "Your guess is too low!\n"
elif guess > secret_number:
print "Your guess is too high!\n"
这是一个运行示例:
Hello! What's your name? :)
Well :), I'm thinking of a number between 1 and 20.
Since I'm a benevolent computer program, I'll give you 6 guesses.
You have 6 guesses left!
Take a guess: 2
Your guess is too low!
You have 5 guesses left!
Take a guess: 2
You already guessed that!
You have 5 guesses left!
Take a guess: 3
Your guess is too low!
You have 4 guesses left!
Take a guess: 7
Your guess is too high!
You have 3 guesses left!
Take a guess: 5
Your guess is too high!
You have 2 guesses left!
Take a guess: 4
You win! 4 was my secret number!
