在 while 循环中只执行一次代码行

7

如何使while循环内的特定代码行仅执行一次?

我希望这一行代码:"Hello %s, please enter your guess: " %p1" 仅在玩家猜错时不被重复运行。

是否有命令或函数可以使用,还是必须重新构建整个游戏程序?在当前形式下,是否有简单的解决方案?

import random

number = random.randint(1,9)

p1 = input("Please enter your name: ")

count = 0

guess = 0

while guess != number and guess != "exit":

    guess = input("Hello %s, please enter your guess: " % p1)

    if guess == "exit":
        break

    guess = int(guess)
    count += 1

    if guess == number:
        print("Correct! It Took you only", count, "tries. :)")
        break
    elif guess > number:
        print("Too high. Try again.")
    elif guess < number:
        print("Too low. Try again.")
4个回答

6
你可以创建一个标志变量,例如:
print_username = True

在 while 循环之前。在循环的第一次迭代后取消选中它:

if print_username:
    guess = input("Hello %s, please enter your guess: " % p1)
    print_username = False
else:
    guess = input("Try a new guess:")

3
三元运算符更简短,并且count已经可以作为鉴别器使用,不需要创建另一个标志。虽然这样做“更容易”。 - Patrick Artner

3

在每次迭代中,您必须要求一个新的guess - 否则代码将无限循环(在第一次猜错后)或立即完成。

为了改变消息,您可以使用三元运算符(也称为内联if语句),在打印输出内进行条件判断:

# [start identical]

while guess != number and guess != "exit": 
    guess = input("Hello {}, please enter your guess: ".format(p1) if count == 0 
                  else "Try again: ")

# [rest identical]

请看Python 中是否有三元条件运算符

该三元条件运算符检查你增加的 count 变量,并在其为 0 时打印一条消息,而在后续运行中则打印另一段文字(因为此时 count 不再为 0)。

你可能还想转向更现代化的字符串格式化方式:str.format - 同样适用于 2.7 版本


0
在 while 循环中仅执行 x 次指令的一种方法是实现一个计数器,并添加一个 if 条件,检查计数器是否小于 x,然后再执行该指令。

0

你应该在循环外请求用户名,并在循环开始时请求输入。

在循环内,你应该在最后创建输出并在下一次迭代时请求输入。对于第一个迭代,同样的方法也适用:在循环外创建输出,然后请求输入(在循环内的第一件事)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接