【问题标题】:Python3: How to check for a string within a while loop that expects integersPython3:如何在需要整数的while循环中检查字符串
【发布时间】:2020-11-11 03:09:03
【问题描述】:

在 Python3 中:如何在需要整数的 while 循环中检查字符串...

这是我目前的代码:我想用“quit”或“q”替换标记值“0”。我该怎么做?

import random

highest = 10
lowest = 1
counter = 0

random_number = random.randint(lowest, highest)
# The randint function is in the random function within the random MODULE imported above.

guess = int(input(f"Guess a number between {lowest} and {highest}. Enter '0' at any time to quit: "))

while guess is not random_number:
    if guess == 0:
        print("Quitting game.")
        break
    elif guess < random_number:
        counter += 1
        guess = int(input("Guess higher: "))
    elif guess > random_number:
        counter += 1
        guess = int(input("Guess lower: "))
    if guess == random_number:
        print(f"Correct! Well done!! You got it right after {counter} guess(es)!")

我想把sentinel值“0”改成“q/quit”,但不知道怎么...

【问题讨论】:

    标签: python string while-loop integer sentinel


    【解决方案1】:

    guess = int(in.... 不要将其转换为 int,而是转换为字符串。

    然后看看字符串是“q”还是“quit”

    如果不是 q 或退出,则将其转换为 int : elif int(guess)

    【讨论】:

      【解决方案2】:

      在将其转换为整数之前,您必须检查输入是否为q / quit。使用int(input(..)),您可以将输入转换为整数。如果用户输入一个字符串,这将失败。

      ...
      while guess is not str(random_number):
          if guess == "q" or guess == "quit":
              print("Quitting game.")
              break
          guess = int(guess)
          # this might fail if the user did not enter a number
          if guess < random_number:
              counter += 1
              guess = input("Guess higher: ")
          elif guess > random_number:
              counter += 1
              guess = input("Guess lower: ")
          if guess == random_number:
              print(f"Correct! Well done!! You got it right after {counter} guess(es)!")
      

      【讨论】:

      • 谢谢!
      【解决方案3】:

      你可以做一件事:- 一种方法是您可以在循环内输入并检查输入,当用户的猜测与实际数字匹配时使用中断:-

      while 1:
       guess = input()
       if guess == 'q' or guess == 'quit':
        print("Quitting game")
        break
       elif int(guess) < random_numer:
      

      然后继续你的程序的其余部分。

      【讨论】:

      • 很高兴为您提供帮助:)
      【解决方案4】:

      不妨试试这个:

      import random
      
      highest = 10
      lowest = 1
      counter = 0
      
      random_number = random.randint(lowest, highest)
      
      guess = input(f"Guess a number between {lowest} and {highest}. Enter 'quit' at any time to quit: ")
      
      while guess is not random_number:
          if guess == "quit":
              print("Quitting game.")
              break
          guess = int(guess)
      
          if guess < random_number:
              counter += 1
              guess = int(input("Guess higher: "))
          elif guess > random_number:
              counter += 1
              guess = int(input("Guess lower: "))
          if guess == random_number:
              print(f"Correct! Well done!! You got it right after {counter} guess(es)!")
      

      首先,将输入存储为字符串,然后检查它是否等于'quit'。如果不是这样,将字符串转换为整数并正常进行。

      我试过了,效果很好,但也许有更优雅的方法。

      【讨论】:

        【解决方案5】:

        谢谢大家。这是完全有效的代码副本,也是我正在寻找的。关键是(就像你们都提到的)

        1. 让输入最初是一个字符串
        2. 立即检查“q”或“退出”。
        3. 然后将其余代码的猜测转换为 int
        4. 让 if/elif 语句中的后续输入为字符串。
        guess = input(f"Guess a number between {lowest} and {highest}. Enter 'quit' at any time to quit: ")
        
        while guess is not random_number:
            if guess.casefold() == "quit" or guess.casefold() == 'q':
                print("Quitting game.")
                break
            guess = int(guess)
            if guess < random_number:
                counter += 1
                guess = input("Guess higher: ")
            elif guess > random_number:
                counter += 1
                guess = input("Guess lower: ")
            if guess == random_number:
                print(f"Correct! Well done!! You got it right after {counter} guess(es)!")
        

        再次感谢!

        下面是带有“无效输入”检查器的相同代码,用于继续循环:

        guess = input(f"Guess a number between {lowest} and {highest}. Enter 'quit' at any time to quit: ")
        
        while guess is not random_number:
            if guess.casefold() == "quit" or guess.casefold() == 'q':
                print("Quitting game.")
                break
        
            if guess.isnumeric():
                guess = int(guess)
                if guess < random_number:
                    counter += 1
                    guess = input("Guess higher: ")
                elif guess > random_number:
                    counter += 1
                    guess = input("Guess lower: ")
                if guess == random_number:
                    print(f"Correct! Well done!! You got it right after {counter} guess(es)!")
            else:
                print("Invalid input. Try again...")
                guess = input(f"Guess a number between {lowest} and {highest}. Enter 'quit' at any time to quit: ")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-06-02
          • 2012-10-05
          • 1970-01-01
          • 2016-04-03
          • 2022-11-11
          • 2020-10-13
          • 1970-01-01
          相关资源
          最近更新 更多