为什么我的猜谜游戏跳过了“低”和“高”部分

2024-09-27 23:24:55 发布

您现在位置:Python中文网/ 问答频道 /正文

import random
import time
numOfGuesses = 0
guess = ''
playername = ''
numbertoguess = 0
MAX_GUESS = 10
#======================
playername = input ('What is your name:')
numbertoguess = random.randint (1, 100)
input("hello, " + playername + ", Guess the number I am thinking of   
(hint     its     between 1 and 100")
#======================
while numOfGuesses < MAX_GUESS:
 guess = int(input("What is your guess:"))
numOfGuesses += 1
 time.wait(1)
if guess < numbertoguess:
print ('Higher')
if guess > numbertoguess:
 print ('Lower')
elif numOfGuesses > MAX_GUESS:
 sys.exit()
else:
   sys.exit()
 #======================
 if guess == numbertoguess:
 print ("You are right," + playername + ",you guessed it in "+str  
(numOfGuesses) + "tries")
 elif guess != numbertoguess and numOfGuesses == 10:
print ("awe so close," + playername + ".")
print ("the number was" + str(numbertoguess) +".")`

当你完成一个猜测而不是告诉你去“更高”或“更低”的代码运行在他们和不打印。我对python太陌生了,如果有人能帮我那就太好了。你知道吗


Tags: importinputyouriftimeisrandomwhat
1条回答
网友
1楼 · 发布于 2024-09-27 23:24:55

好的,这里有几个问题。你知道吗

1)Python在类C语言中将换行符视为分号,所以

input("hello, " + playername + ", Guess the number I am thinking of   
(hint     its     between 1 and 100")

将引发语法错误。要编码换行符,请使用转义序列"\n"

input("hello, " + playername + ", Guess the number I am thinking of \n(hint it's between 1 and 100")

不过,这看起来像是复制+粘贴问题。你知道吗

2)Python使用缩进来确定块的位置。因此,循环体中的所有语句必须以与其余语句相同的空格/制表符数开始。所以while循环应该看起来像(缩进)

while numOfGuesses < MAX_GUESS:
    guess = int(input("What is your guess:"))
    numOfGuesses += 1
    time.sleep(1)

    if guess < numbertoguess:
        print ('Higher')
    if guess > numbertoguess:
        print ('Lower')
    elif numOfGuesses > MAX_GUESS:
        sys.exit()
    else:
        sys.exit()

我认为这是你在问题标题中指出的问题的根源。因为while循环只执行guess = int(input("What is your guess:"))行,因为它是唯一正确缩进的行。你知道吗

注意:不能混用制表符和空格,python会有一个fit和no soup for you

缩进样式通常为4个空格或1个制表符。单空格缩进会让你头痛一段时间后。你知道吗

3)如果需要延迟,正确的函数是time.sleep()

4)while体中有两个if语句,因此如果猜测通过了if guess < numbertoguess:,它将继续到下一个if guess > numbertoguess:并失败。然后它将跳转到else主体,这是一个系统退出/中断语句。任何一个都会导致游戏过早结束。你知道吗

将if链更改为:

if guess < numbertoguess:
    print ('Higher')
elif guess > numbertoguess:
    print ('Lower')
elif numOfGuesses > MAX_GUESS:
    break;
else:
    break;

5)你有sys.exit(),但你忘了import sys。而且exit()不需要导入,您可以在没有sys模块的情况下使用它。你知道吗

6)exit()退出程序。如果执行其中一个elif / else语句,while循环之后将不会运行任何内容。您要查找的语句可能是break语句,它在循环后的下一行继续执行程序。你知道吗

7)与数字1相同),这里将语句分成两行

print ("You are right," + playername + ",you guessed it in "+str  
(numOfGuesses) + "tries")

固定到

print ("You are right," + playername + ",you guessed it in " + str(numOfGuesses) + "tries")

注意事项

在样式方面,使用4个空格或1个制表符缩进。它使事情更容易阅读。还可以使用换行来分隔代码中的逻辑块。您可以使用#===========来表示重要的块或巨大的逻辑块。你知道吗

这并不是说你不能没有换行符,也不能用#===========作为逻辑块,但是读你代码的人会讨厌你。你知道吗


你的字符串到处都缺少一些格式


您已经在下面硬编码了最大猜测:elif guess != numbertoguess and numOfGuesses == 10:事实上,您并不需要检查,因为您已经检查了上面的正确答案。你知道吗

if guess == numbertoguess:
    print ("You are right," + playername + ",you guessed it in " + str(numOfGuesses) + "tries")

else:    
    print ("awe so close," + playername + ".")
    print ("the number was" + str(numbertoguess) +".")

这是因为用户目前可能处于两种逻辑状态:正确猜测或错误猜测MAX_GUESS次。如果你有3+个逻辑状态(猜对了,猜错了,复活节彩蛋猜42),你就得再做一次检查。你知道吗


考虑使用for循环而不是while循环。while循环适用于不需要知道已执行了多少个循环,或者循环条件是特定的布尔表达式的情况。(例如while something.hasNext():

for循环适用于特定次数的迭代,或者需要按顺序访问某些内容时。(每个循环也有一个)。你知道吗

for i in range(MAX_GUESS): # i = 0 to i = MAX_GUESS -1

那么你就不需要检查你的猜测次数了,因为你保证最多循环一次maxxu的猜测次数


一个建议,如果可以的话。获得一个带有语法高亮显示和检查的IDE(集成开发环境)。我将Eclipsepython插件一起使用,但是eclipse对于初学者来说有点多。我们的CS教授建议使用Wing,但我从未使用过

你知道吗-

成品(字符串格式除外)。我会让你这么做的):

import random
import time

numOfGuesses   = 0
numbertoguess  = 0
MAX_GUESS      = 10
guess          = ''
playername     = ''

playername = input ('What is your name:')
numbertoguess = random.randint (1, 100)
input("hello, " + playername + ", Guess the number I am thinking of \n(hint it's between 1 and 100")

for numOfGuesses in range(MAX_GUESS): # nOG = 0 to nOG = MAX_GUESS -1
    guess = int(input("What is your guess:"))
    time.sleep(1)

    if guess < numbertoguess:
        print ('Higher')
    elif guess > numbertoguess:
        print ('Lower')
    else:
        break;

if guess == numbertoguess:
    print ("You are right," + playername + ",you guessed it in " + str(numOfGuesses) + "tries")

else:    
    print ("awe so close," + playername + ".")
    print ("the number was" + str(numbertoguess) +".")

相关问题 更多 >

    热门问题