【问题标题】:Python Random Guessing GamePython 随机猜谜游戏
【发布时间】:2018-03-06 00:05:19
【问题描述】:

实现 GuessNumber 游戏。在这个游戏中,电脑 - 想一个 0-50 范围内的随机数。 (提示:使用随机模块。) - 反复提示用户猜谜号。 - 如果猜对了,恭喜用户中奖。如果猜测不正确,让用户知道猜测是太高还是太低。 - 猜错 5 次后,告诉用户正确答案。

以下是正确输入输出的例子。

I’m thinking of a number in the range 0-50. You have five tries to
guess it.
Guess 1? 32
32 is too high
Guess 2? 18
18 is too low
Guess 3? 24
You are right! I was thinking of 24!

这是我目前得到的:

import random

randomNumber = random.randrange(0,50)
print("I’m thinking of a number in the range 0-50. You have five tries to guess it.")
guessed = False

while guessed == False:
    userInput = int(input("Guess 1?"))
    if userInput == randomNumber:
        guessed = True
        print("You are right! I was thinking of" + randomNumber + "!")
    elif userInput>randomNumber:
        print(randomNumber + "is too high.")
    elif userInput < randomNumber:
        print(randomNumber + "is too low.")
    elif userInput > 5:
        print("Your guess is incorrect. The right answer is" + randomNumber)

print("End of program")

我遇到了一个语法错误,当用户输入错误的答案(例如,猜 1?、猜 2?、猜 3?、猜 4?)时,我不知道如何使猜数加一,猜5?等等……

【问题讨论】:

    标签: python


    【解决方案1】:

    由于您知道循环执行了多少次,并且想要对它们进行计数,因此请使用 for 循环来控制该部分。

    for guess_num in range(1, 6):
        userInput = int(input(f"Guess {guess_num} ? "))
        if userInput == randomNumber:
            # insert "winner" logic here
            break
        # insert "still didn't guess it" logic here
    

    你知道它是如何工作的吗?

    【讨论】:

    • 为了伟大的正义!移动格式字符串f"Guess {guess_num}?"!
    • 现在我们有了 f 字符串,是的,这是个好主意。
    【解决方案2】:

    您忘记缩进属于您的while 循环的代码。此外,您希望使用建议的变量或循环来跟踪您猜测的次数。此外,在给出提示时,您可能希望打印玩家猜到的数字,而不是实际数字。例如,

    import random
    
    randomNumber = random.randrange(0,50)
    print("I’m thinking of a number in the range 0-50. You have five tries to guess it.")
    guessed = False
    count = 0
    
    while guessed is False and count < 5:
        userInput = int(input("Guess 1?"))
        count += 1
        if userInput == randomNumber:
            guessed = True
            print("You are right! I was thinking of" + randomNumber + "!")
        elif userInput > randomNumber:
            print(str(userInput) + " is too high.")
        elif userInput < randomNumber:
            print(str(userInput) + " is too low.")
        if count == 5:
            print("Your guess is incorrect. The right answer is" + str(randomNumber))
            print("End of program")
    

    【讨论】:

      【解决方案3】:

      您正面临语法错误,因为您试图将整数添加到字符串。这是不可能的。要执行您想要的操作,您需要在每个打印语句中转换 randomNumber

      import random
      
      randomNumber = random.randrange(0,50)
      
      print("I’m thinking of a number in the range 0-50. You have five tries to guess it.")
      guessed = False
      
      while guessed == False:
          userInput = int(input("Guess 1?"))
          if userInput == randomNumber:
              guessed = True
              print("You are right! I was thinking of" + str(randomNumber) + "!")
          elif userInput>randomNumber:
              print(str(randomNumber) + "is too high.")
          elif userInput < randomNumber:
              print(str(randomNumber) + "is too low.")
          elif userInput > 5:
              print("Your guess is incorrect. The right answer is" + randomNumber)
      
      print("End of program")
      

      【讨论】:

      • 感谢您的帮助
      【解决方案4】:
      import random
      arr=[]
      for i in range(50):
         arr.append(i)
      answer=random.choice(arr)
      for trial in range(5):
         guess=int(input("Please enter your guess number between 0-50. You have 5 
         trials to guess the number."))
         if answer is guess:
             print("Congratulations....You have guessed right number")
             break
         elif guess < answer-5:
             print("You guessed too low....Try again")
         elif guess > answer+5:
             print("You guessed too high..Try again")
         else:
             print("Incorrect guess...Try again please")
      print("the answer was: "+str(answer))       
      

      【讨论】:

        【解决方案5】:

        只需添加三件事:

        “抽象语法树”有一个名为literal_eval 的方法,它在解析数字方面比int 做得更好。这也是评估代码比使用eval 更安全的方法。就采用那个方法,它是pythonic。

        我在这里大量使用格式字符串,您可以选择使用它们。它们对 python 来说是相当新的;使用它们的原因是 python 字符串是不可变的,所以做“这个”+ str(some_number)+“方式”不是pythonic......我相信它会在内存中创建 4 个字符串,但我不是 100%对此。至少看看str.format()

        最后一个额外的处理是条件赋值。 result = "low" if userInput &lt; randomNumber else "high" 行指定满足条件的“低”,否则指定“高”。这只是为了展示格式字符串的强大功能,同时也有助于控制条件分支的复杂性(赢和输路径现在很明显)。可能不关心你现在在哪里。但是,你的箭袋的另一个箭头。

        import random
        from ast import literal_eval
        
        randomNumber = random.randrange(0,50)
        print("I’m thinking of a number in the range 0-50. You have five tries to guess it.")
        
        win = False
        for guess_count in range(1,6):
            userInput = literal_eval(input(f"Guess {guess_count}: "))
            if userInput == randomNumber:
                print(f"You are right! I was thinking of {randomNumber}!")
                win = True
                break
            else:
                result = "low" if userInput < randomNumber else "high"
                print(f"{userInput} is too {result}")
        
        if win:
            print ("YOU WIN!")
        else:
            print("Better luck next time")
        print("End of program")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-11-29
          • 2019-06-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-21
          • 1970-01-01
          相关资源
          最近更新 更多