【问题标题】:Error with my game?我的游戏出错了?
【发布时间】:2015-12-02 00:06:09
【问题描述】:
from random import randint

random_number = randint(1, 10)

guesses_left = 3
# Start of the game
while guesses_left != 0:
   def guess():
        guess = int(input("What is your guess?"))
        if guess > 10:
        print ("Insert value between 1 and 10")
        guesses_left += 1
    guess()
if guess == random_number:
    print ("You win")
    break
guesses_left -= 1
else:
    print ("You lose")

我正在制作这个游戏,其中随机数形成并且用户猜测随机数以赢得游戏。但是,我想实现一个安全性,如果猜测超过 10,那么它将打印“从 1 到 10 的输入值”(参见代码),并在左边的猜测中添加 1。我把它变成了一个函数,这样打印消息就会一直显示出来,直到用户把他所有的猜测都从 1 到 10。我在那个函数本身中遇到了一个错误:(

另外,我怎样才能在没有功能的情况下继续显示打印消息?我知道如何使用 while 循环来做到这一点,但有更好的方法吗?

【问题讨论】:

  • 总是添加完整的错误信息。
  • 你有错误的缩进
  • 立即观察,你在函数内部的缩进是错误的
  • 您还在玩一个危险的游戏,其中包含一个嵌套函数并在其主体内重命名该函数。
  • 你不需要函数 - 你需要正确的缩进

标签: python python-2.7 python-3.x ipython


【解决方案1】:

您根本不需要该函数,因为您不会多次调用它。

思考问题的一个好方法是程序以不知道玩家猜测的状态开始。您可以将其表示为 0。然后 while 循环检查猜测是否 >=1 AND

【讨论】:

    【解决方案2】:

    这里有几点说明:

    1) 去掉while循环外的guess函数的定义。

    2) 观察缩进。在 Python 中是有意义的

    3)我把guess函数和主代码合并了,还是很好看的

    4) 如果不递减,guesses_left 可以避免递增 1

    5) 我真的希望你正在努力学习编程,而不是让我们为你完成你的作业。 Python可以很强大,请继续学习。

    from random import randint
    random_number = randint(1, 10)
    
    guesses_left = 3
    
    # Start of the game
    win=False
    while guesses_left>0:
        guess=int(input("What is your guess?"))
        if guess==random_number:
            win=True
            break
        elif guess>10:
            print("Insert value between 1 and 10")
            continue
        else:
            guesses_left -= 1
    if win:
        print("You win")
    else:
        print("You lose")
    

    【讨论】:

    • 是的,先生。我对学习python非常认真。我为 python 安装了 kivy,以便以后进入 android 开发。目前我正在向 codecademy 学习。任何其他对我有帮助的学习网站都会非常有帮助。谢谢楼主
    • 先生,我不明白您在 elif 中的 continue 语句?那有什么用?对不起,初学者的问题。
    • continue 在迭代块内使用以开始下一次迭代,而不运行 continue 之后的任何内容。我想你可以不使用 continue 语句,因为 if/elif 是 while 下的最后一个块。
    • 你不检查输入值是否小于1。
    【解决方案3】:
    from random import randint
    random_number = 10 # randint(1, 10)
    guesses_left = 3
    
    # Start of the game
    while guesses_left != 0:
        guess = int(input("Guess a number between 1 and 10: "))
        if guess > 10:
            print "(error: insert a value between 1 and 10)"
            guesses_left = guesses_left - 1 #add if you want to dock them a guess for not following instructions :)
        else:
            if guess is random_number:
                print ("You win!")
                break
            else:
                print "Nope!"
                guesses_left = guesses_left - 1
        if guesses_left is 0:
            print "Wah Wah. You lose."
    

    我的代码可能比它需要的更冗长,但它可以解决问题。您编写脚本的方式存在一些问题。

    • 就像 Hack Saw 所说,我认为您不需要该功能。
    • 缩进已关闭。这对 python 很重要

    祝你在课堂上好运! :)

    【讨论】:

    • 非常感谢先生 :D 但是如果我想一次又一次地调用输入怎么办?我还是不应该使用函数?什么时候应该使用函数?我对功能很困惑。还有一件事,我看到您使用“is”,例如“guess is random_number”。在python中,“是”==“=”?感谢您修改代码。它有助于发现我的错误和我可以改进的地方。我目前正在从 codecademy 学习,所以如果你能指导我到一些有用的网站来学习 python,我将非常感激。谢谢你:)
    • 当然。没问题。你能解释一下上下文 - 你想如何或为什么要再次调用该函数?这是“是”与“=”的答案。继续工作!祝你好运,在寻找有趣的挑战时查看 Euler - projecteuler.net
    • 你在什么程序上打字?记事本++?还有比这更好的吗?谢谢 :) 我想调用这个函数,这样我就可以一次又一次地重复输入语句。
    • 有比记事本好得多的想法。看一下 PyCharm。我使用社区版。
    • 让它成为一个函数实际上并不能帮助你重复调用它。 while 循环可以做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多