【问题标题】:Guess that number game猜数字游戏
【发布时间】:2021-11-20 09:43:43
【问题描述】:

我正在开发一个 python 项目“猜那个数字”,其中计算机从给定范围内选择一些随机数,用户必须在 5 次尝试内猜出该数字。如果用户成功猜到数字,他将被重定向到下一个级别。否则,游戏结束。 当用户无法猜测该数字应该结束但在我的情况下,它再次要求相同的级别并且没有游戏结束的输出。这是我的代码:

from random import randint
level = 1
points = [100,75,50,25,10]
points_scored = 0
play = True
while play:
    while level != 0:
        end_value = level * 10
        secret_number = randint(1,end_value)
        for counter in range(0,5):
            #gets the guessing number as user input
            guess_number = int(input("Guess the secret number between 1 and {} ({} attempts left):".format(end_value,5-counter)))
            #check guessing number is correct or higher or lower
            if secret_number == guess_number:
                print("Your Guess is Correct, You Won the level {} with {} points".format(level,points[counter]))
                points_scored += points[counter]
                level = level + 1
                break
            elif guess_number < secret_number:
                print("Your Guess is lower than secret number")
            elif guess_number > secret_number:
                print("Your Guess is higher than secret number")
            else:#else of for statement
                print("Game Over, You Loose the Game, secret number is {} and your total scores are".format(secret_number, points[counter]))
                break
    else:#else of while statement
        print("Congratz, You Won the Game with {} !!!".format(points_scored))
        again=str(input("Do you want to play again, type yes or no "))
        if again == "no":
            play = False
           quit()

我附上截图:

【问题讨论】:

  • 循环中没有 else 语句。您需要检查计数器是否过高,然后结束游戏
  • 没有循环的 else 语句之类的东西?????
  • @LiorDahan 实际上有一个 else 循环语句(OP 应该在这里使用)
  • @LiorDahan 你错了。阅读有关for...的文档...
  • 你可能在想……除了python之外的所有语言

标签: python python-3.x


【解决方案1】:

您编写代码的方式是正确的,但它再次循环。我使用 while 循环对您的代码进行了一些修改。

from random import randint
level = 1
points = [100,75,50,25,10]
points_scored = 0
play = True
while play:
    while level != 0:
        end_value = level * 10
        secret_number = randint(1,end_value)
        counter=0
        while counter<5:
            #gets the guessing number as user input
            guess_number = int(input("Guess the secret number between 1 and {} ({} attempts left):".format(end_value,5-counter)))
            #check guessing number is correct or higher or lower
            if secret_number == guess_number:
                print("Your Guess is Correct, You Won the level {} with {} points".format(level,points[counter]))
                points_scored += points[counter]
                level = level + 1
                break
            elif guess_number < secret_number:
                print("Your Guess is lower than secret number")
            elif guess_number > secret_number:
                print("Your Guess is higher than secret number")
            counter=counter+1
            if(counter>4):
                print("Game Over, You Loose the Game, secret number is {} and your total scores are{}".format(secret_number, points[counter-1]))
                break
        break

    print("Congratz, You Won the Game with {} !!!".format(points_scored))
    again=str(input("Do you want to play again, type yes or no "))
    if again == "no":
        play = False
        quit()
    else:
        level=1

这里,超过猜测次数时会打印游戏结束。

【讨论】:

  • 我不明白为什么这是公认的答案,它没有按预期工作。在while level != 0:循环的最后一行中的break无论用户输赢都会执行,使他们进入Do you want to play again...块并每次重置级别。
【解决方案2】:

逻辑几乎完全正确,但您的代码存在很大问题。想想你在最内层循环中设置的条件:

if secret_number == guess_number:
    ...
elif guess_number < secret_number:
    ...
elif guess_number > secret_number:
    ...
else:
    # How can a number be not equal, not bigger, and not smaller than another number???

我认为可以进行一些重构以使代码更清晰并正确执行:

from random import randint
level = 1
points = [100, 75, 50, 25, 10]
points_scored = 0
# No need to use the play variable, the program exits in the end with "quit" if the user doesn't want to keep playing
# You don't seem to set the level as 0 anywhere so why not just keep playing until the user loses.
while True:
    end_value = level * 10
    secret_number = randint(1, end_value)
    # The first parameter in range is already 0, no need to explicitly set it
    for counter in range(5):
        # gets the guessing number as user input
        guess_number = int(input("Guess the secret number between 1 and {} ({} attempts left):".format(end_value, 5 - counter )))
        # check guessing number is correct or higher or lower
        if secret_number == guess_number:
            print("Your Guess is Correct, You Won the level {} with {} points".format(level, points[counter]))
            points_scored += points[counter]
            # level += 1 is the same as level = level + 1
            level += 1
            break
        elif guess_number < secret_number:
            print("Your Guess is lower than secret number")
        # This next one could be "else:" because, as stated before,
        # if guess_number is not equal nor smaller than secret_number,
        # it can only be bigger, but it makes no difference.
        elif guess_number > secret_number:
            print("Your Guess is higher than secret number")
    else:
        print("Game Over, You Loose the Game, secret number is {}. You got {} points.".format(secret_number, points_scored))
        # No need to cast the input as str, it's already a string.
        again = input("Do you want to play again, type yes or no ")
        if again == "no":
            quit()
        else:
            level = 1

【讨论】:

  • 天啊,它对我有用。感谢您的帮助
  • 感谢让我知道你可以在循环中使用else
【解决方案3】:

您回到同一级别的原因是您的 else 语句没有执行。纠正此问题的一种方法是删除 else 语句并将其带出计数器循环。还要添加一个标志来保持玩家的失败状态。 变化:

elif guess_number > secret_number:
    print("Your Guess is higher than secret number")
else:#else of for statement
    print("Game Over, You Loose the Game, secret number is {} and your total scores are".format(secret_number, points[counter]))
    break

到:

    elif guess_number > secret_number:
            print("Your Guess is higher than secret number")
if level_lost:
    print("Game Over, You Loose the Game, secret number is {} and your total scores are".format(secret_number, points[counter]))
    level = 0
    break

如果玩家猜对了数字,则将失败状态设置为 false。

while level != 0:
    level_lost = True
    end_value = level * 10
    secret_number = randint(1,end_value)
    for counter in range(0,5):
        #gets the guessing number as user input
        guess_number = int(input("Guess the secret number between 1 and {} ({} attempts left):".format(end_value,5-counter)))
        #check guessing number is correct or higher or lower
        if secret_number == guess_number:
            print("Your Guess is Correct, You Won the level {} with {} points".format(level,points[counter]))
            points_scored += points[counter]
            level = level + 1
            level_lost = False

然后终于重新开始游戏再改

if again == "no":
    play = False

到:

if again == "no":
    play = False
    quit()
else:
    level=1

【讨论】:

    猜你喜欢
    • 2016-06-21
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多