Python的新手,坚持这一点

时间:2016-03-26 00:10:02

标签: python

这是我的第一篇文章,但我通过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.")

1 个答案:

答案 0 :(得分:3)

您得到的错误是您将无效范围传递给randint,例如:

ValueError: empty range for randrange() (51,51, 0)

randrangerandint在内部使用,并期望startstop值作为前两个参数。它间接要求start低于stop

在您的代码中,您使用带有randintlowerbound参数的upperbound,因此在致电lowerbound < upperbound之前,您必须注意randint

您已经在循环内的第一个if进行了检查(顺便说一句,请注意a < bb > 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和有效边界。