【问题标题】:Loop won't work within method, guessing game [closed]循环在方法内不起作用,猜谜游戏[关闭]
【发布时间】:2021-08-14 05:18:27
【问题描述】:

我正在尝试制作一个猜谜游戏,我想我已经把所有东西都安排好了。但是,由于某种原因,我的第二种方法中的 for 循环似乎被跳过了。这个循环应该是从用户那里获取猜测并将它们与number_gen 方法中生成的数字进行比较。

我什至不确定我是否应该使用__init__ 方法,但这就是我最后一次课堂作业的开始,所以我认为这是一个不错的起点。

import random

guess = 0
num = 0
attempts = 0

class guessgame:
  def __init__(self, guess, num):
    self.guess = guess
    self.num = num
  
  def number_gen():
    num = random.randrange(1, 100, 1)
    print(num)

  def take_guess():
    
    global attempts
    print("haha")
    for i in range(attempts):
      
      if self.guess != self.num and self.guess == 0:
        input("Enter a number to guess between 1 and 100! ")
    
      elif self.guess != self.num and self.guess >= 1:
        input("Sorry, try again! ")

      elif self.guess == self.num:
        print("You got it!\nIt only took " + attempts + " attempts!")

    attempts = attempts + 1


guessgame.number_gen()
guessgame.take_guess()

我让它打印numhaha 只是为了让我看到它已经走得那么远。

【问题讨论】:

  • 您缺少 self 作为方法的参数。
  • 第一次迭代的尝试次数不等于 0 吗?所以它是for i in range(0): 最后你需要创建一个类的对象。我建议在互联网上查找一些教程。 docs.python.org/3/tutorial/classes.htmlprogramiz.com/python-programming/class
  • 我什至不明白你在这里要做什么;看起来您需要将self 添加到所有方法,然后使用guessnum 创建guessgame 的实例。但是,在take_guess 函数中,您只需继续循环attempt 次,检查在开头初始化的变量是否为开头的数字。如果您每次都检查相同的两个值(因此得到相同的输出attempt 次),那么这个循环有什么用?

标签: python python-3.x loops class methods


【解决方案1】:

您的问题很简单——您在程序中混淆了两个概念

  • 允许的最大值attempts
  • 到目前为止attempts 的数量

你从 0 开始你的全局变量(这是一个糟糕的设计)。然后你尝试循环:

for i in range(attempts):

由于range(0) 是一个空范围,所以根本不执行循环;游戏结束。

您必须将概念分开:也许创建一个类变量guess_limit,这是猜测的上限。使用 that 作为循环限制。将 attempts 保留为局部变量,而不是全局变量。

for i in range(guess_limit):

至于您的其他 cmets,您似乎需要通过更多示例和课堂练习。我完全不明白为什么这个游戏使用了一个类:你从不实例化这个类,所以所做的只是在你的游戏中引入更多的视觉和计算开销。

首先,设计和实现游戏。 然后考虑是否有什么值得做的类。

【讨论】:

  • OP 还需要self 作为所有方法的参数!
  • 我也不明白为什么我必须诚实地使用类,但作业告诉我使用类来创建游戏。显然这只是一些函数和变量,所以我和你一样困惑。否则,感谢您的评论——这太棒了,而且非常有意义。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多