【问题标题】:Executing one line of code inside a while loop only once在while循环中只执行一次代码
【发布时间】:2019-06-20 14:38:35
【问题描述】:

如何让特定的代码行在 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.")

【问题讨论】:

    标签: python loops while-loop


    【解决方案1】:

    必须在每次迭代时请求一个新的guess - 否则代码将无限循环(在第一次错误猜测之后)或立即结束。

    要更改消息,您可以在 print 中使用三元(又名:inline 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]
    

    Does Python have a ternary conditional operator?

    三元组检查您递增的count 变量,如果它是0,则打印一条消息,并在连续运行时打印另一条文本(因为count 不再是0)。

    您可能还想切换到更现代的字符串格式化形式:str.format - works for 2.7 as well

    【讨论】:

      【解决方案2】:

      您应该在循环之外询问用户名并在循环开始时请求输入。

      在循环内部,您在最后创建输出并在下一次迭代中请求输入。第一次迭代也是如此:创建输出(循环外)然后请求输入(循环内的第一件事)

      【讨论】:

        【解决方案3】:

        在while循环中只执行x次指令的一种方法是实现一个计数器,并在执行指令之前添加一个if条件来检查计数器是否

        【讨论】:

          【解决方案4】:

          您可以创建一个标志变量,例如。 G。

          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:")
          

          【讨论】:

          • 三进制更短 - 并且count 已经用作鉴别器 - 无需创建另一个标志。不过这“更容易”。