这是我的第一篇文章,但我通过Google发现了很多很棒的信息。目前,我正在为Absolute Beginner进行Python编程。我在本书相对较早的时候就遇到了一个挑战问题。挑战在于创建一个程序来猜测你在1到100之间随机选择的数字。
此时它起作用,清除无效的答案,并最终猜测你是否遵守规则。如果你诚实地玩游戏,它会起作用。但是,如果你把“低”而不是“更高”,它就会到达程序崩溃的程度。这样可行,但我宁愿重置计数器并用一条消息惩罚用户。
无论如何,到目前为止,这是我的代码。如果使用while循环的第一个“if”子句,您可以看到我尝试制作的内容。你觉得怎么样?
#Computer Guesses Number Program
import random
print("Please select a number between 1 and 100.")
print("As I attempt to guess, you may respond with Higher, Lower, or Yes.")
input("\nPress enter to continue.")
#Start Guessing in the Middle
guess = 50
response = input("\nIs your number " + str(guess) + "?")
#Narrow down guessing further
if response.lower() == "higher":
guess = 75
lowerbound = 50
upperbound = 100
response = input("\nIs your number " + str(guess) + "?")
else:
guess = 25
lowerbound = 1
upperbound = 50
response = input("\mIs your number " + str(guess) + "?")
#Guess loop - eliminates invalid responses and need for capitalization
while response.lower() != "yes":
if lowerbound > upperbound or upperbound < lowerbound:
print("You've been dishonest, let's try again.")
guess = 50
lowerbound = 1
upperbound = 100
elif response.lower() == "higher":
lowerbound = guess + 1
guess = random.randint(lowerbound, upperbound)
elif response.lower() == "lower":
upperbound = guess - 1
guess = random.randint(lowerbound, upperbound)
else:
print("The response options are 'Higher', 'Lower', or 'Yes'.")
response = input("Is this your number " + str(guess) + "?")
print("\nI knew it was ", guess, "the whole time!")
input("\n\nPress enter to exit.")
答案 0 :(得分:3)
您得到的错误是您将无效范围传递给randint
,例如:
ValueError: empty range for randrange() (51,51, 0)
randrange由randint
在内部使用,并期望start
和stop
值作为前两个参数。它间接要求start
低于stop
。
在您的代码中,您使用带有randint
和lowerbound
参数的upperbound
,因此在致电lowerbound < upperbound
之前,您必须注意randint
。
您已经在循环内的第一个if
进行了检查(顺便说一句,请注意a < b
与b > a
相同 - 您只是在另一个方向读取它,但是在错误的时间进行检查:您希望在其中一个边界发生变化之后以及在致电randint
之前执行该检查。
这样做的一种方法是改变你的流程:
while response.lower() != "yes":
if response.lower() == "higher":
lowerbound = guess + 1
elif response.lower() == "lower":
upperbound = guess - 1
else:
print("The response options are 'Higher', 'Lower', or 'Yes'.")
response = input("Is this your number " + str(guess) + "?")
continue
if lowerbound > upperbound:
print("You've been dishonest, let's try again.")
guess = 50
lowerbound = 1
upperbound = 100
guess = random.randint(lowerbound, upperbound)
response = input("Is this your number " + str(guess) + "?")
这里,我们只在解析用户输入时改变边界。如果用户输入的内容无效,我们只需再次询问它们并从头开始继续循环(跳过下半部分)。否则,在更新边界后,我们会对边界执行验证,然后使用randint
进行新的猜测。
这样,我们确保只使用randint
和有效边界。