【问题标题】:Python Number Guessing Game not Working [duplicate]Python数字猜谜游戏不起作用[重复]
【发布时间】:2014-07-16 08:42:32
【问题描述】:

所以我想涉足开发游戏和模组等,所以我开始研究编程语言并决定选择 python 作为我的起始语言,因为它看起来相当简单且非常有效。我已经做了大约两天了,并利用我目前的知识尝试编写猜谜游戏的代码!在您继续阅读之前,这是我的游戏的代码:

import random

print("Welcome to a guessing game!")
print ("You have 3 try's to guess the correct number!")


number = raw_input ("Pick a number between 1 and 10!: " )
compnumber = random.randint (1,10)
enter = "Please press enter to exit..."
winner = "Congrats your a Winner!"
loser_high = "Uh-Oh!  That Number is to high!  Guess again!"
loser_low = "Uh-Oh!  That number is to low!  Guess again!"
demand = "Pick a number between 1 and 10!: "
game_over = "Sorry, you have lost the game!"


#Guess Number One
if number == compnumber :
    print (winner)
elif number != compnumber and number > compnumber :
    print (loser_high)
    guess2 = raw_input ()
elif number != compnumber and number < compnumber :
    print (loser_low)
    guess2 = raw_input (demand)

#Guess Number Two
if guess2 == compnumber :
    print (winner)
elif guess2 != compnumber and guess2 > compnumber :
    print (loser_high)
elif guess2 != compnumber and guess2 < compnumber :
    print (loser_low)
    guess3 = raw_input (demand)

#Guess Number Three
if guess3 == compnumber :
    print (winner)
elif guess3 != compnumber and guess3 > compnumber :
    print (loser_high)
elif guess3 != compnumber and guess3 < compnumber :

这只是一个简单的 40 行代码,我非常自豪:D

所以无论如何,这是我的问题。当我运行应用程序时,我一般不会收到任何语法错误或任何错误,但是当我输入我的第一个猜测时,它总是说我的猜测太高了......当我再次尝试时,它说同样的事情然后控制台关闭...这是为什么?

另外,如果有人能给我一些关于如何简化/压缩我当前代码的建议,请在下面发布,如果有人有一些学习更高级 python 的教程,请告诉我!谢谢!!!

【问题讨论】:

  • 欢迎来到 StackOverflow!请避免使用外部资源,而是在此处粘贴您的代码。
  • 你还没有粘贴整个程序。
  • 顺便说一句,您的代码(甚至 pastebin 上的原始版本)似乎不完整...

标签: python


【解决方案1】:

您的问题是raw_input() 返回一个字符串,而random.randint() 返回一个整数。在 Python 2 中,比较不同类型的对象是合法的,字符串的比较总是高于整数。

您需要将用户输入转换为ints,然后它应该可以工作。

guess = int(raw_input())

此外,您不应通过复制/粘贴大致相同的代码三次来实现循环。使用forwhile 循环:

for attempt in range(3):
    guess = int(raw_input(demand))
    if guess == compnumber:
        print winner
        break          # abort the loop
    elif guess > compnumber:
        print loser_high
    else:
        print loser_low
else:
    print game_over

【讨论】:

    【解决方案2】:

    我怀疑问题在于原始输入是一个字符串,而随机值是一个整数。尝试将第 7 行更改为:

    number = int(raw_input("Pick a number between 1 and 10!: ").strip())
    

    这个修改做了两件事:

    • 删除输入值周围的所有空格(使用.strip()
    • 将字符串转换为整数类型(使用int()

    您还需要在接受用户输入的其他行上执行类似的操作。

    【讨论】:

    • 不需要strip()
    • 据我了解,raw_input() 负责去除尾随换行符,但明确的 strip() 调用将处理无意中在数字周围添加的任何空格。虽然我猜真正应该发生的是使用正则表达式进行更明确的输入验证。
    • 为什么?试试int("\n\t 123 \n \n\t") - 根本不需要去掉空格。
    • 我按照raw_input() 文档所说的去做。当然,这不如测试它可靠:)
    【解决方案3】:

    您需要将raw_input 返回的字符串转换为数字。您还可以为整个游戏设置一个循环并防止代码重复。另一件事是,在 if 条件中检查 number == compnumber 后,您不必在 else 部分检查 number != compnumber

    # ....
    
    for i in range(3):
        number = int(raw_input ("Pick a number between 1 and 10!: " ))
        if number == compnumber :
            print (winner)
            exit(0)
        elif number > compnumber :
            print (loser_high)
        elif number < compnumber :
            print (loser_low)
        print "Guess again!"
    

    【讨论】:

    • 我认为您不需要检查所有这些条件 :)
    【解决方案4】:
    import random
    
    LOSER_HIGH, LOSER_LOW, WINNER = 1, -1, 0
    GUESS_TIMES = 3
    
    WIN_STR = "Congrats your a Winner!"
    GAMEOVER_STR = "Sorry, you have lost the game!"
    LOSER_HIGH_STR = "Uh-Oh!  That Number is to high!  Guess again!"
    LOSER_LOW_STR = "Uh-Oh!  That number is to low!  Guess again!"
    DEMAND_STR = "Pick a number between 1 and 10!: "
    
    
    def do_guess(number, compnumber):
        if number > compnumber:
            return LOSER_HIGH
        elif number < compnumber:
            return LOSER_LOW
        else:
            return WINNER
    
    def main():
        compnumber = random.randint (1,10)
    
        print ("Welcome to a guessing game!")
        print ("You have 3 try's to guess the correct number!") 
    
        for i in xrange(GUESS_TIMES):
            number = int(raw_input(DEMAND_STR))
            ret = do_guess(number, compnumber)
            if ret == LOSER_HIGH:
                print LOSER_HIGH_STR
            elif ret == LOSER_LOW:
                print LOSER_LOW_STR
            else:
                print WIN_STR
                break
        else:
            print GAMEOVER_STR
    
        raw_input("Please press enter to exit...")
    
    if __name__ == '__main__':
        main()
    

    【讨论】:

    • 如果您突出显示并解释您所做的关键更改,这可能会对 OP 有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多