Vinnaren i pepparkakshustävlingen!
2019-03-11, 11:36
  #1
Medlem
Kod:
class newgrid(object):
    def __init__(self, grid, play):
        self.grid = grid
        self.play=play
play() # <----- LINE 116

Kod:
/Traceback (most recent call last):
  File "/Users/../Desktop/minrlj klass.py", line 116, in <module>
    play() # <----- LINE 116
NameError: name 'play' is not defined

Men grejen är, att jag tror att när jag försöker anropa play(), utan att skapa ett objekt av newgrid.

Och då har jag googlat hur jag ska skapa ett objekt av newgrid.

då läser jag http://www.bilddump.se/bilder/201903...3.249.5.48.png
och ser på ex koden: http://www.bilddump.se/bilder/201903...3.249.5.48.png

å ska jag då gör en definition av play() då?

Kod:
class newgrid(object):
    def __init__(self, grid, play):
        self.grid = grid
        self.play=play

def play(self, play):
self.play=play
play() 

ååå fattar inte....
Citera
2019-03-11, 11:40
  #2
Medlem
kodsnickrarns avatar
Kod:
class newgrid():
   def __init__(self, grid, play)
      self.grid = grid
      self.play = play

def play():
   print("You are now in play()")

def grid():
   print("You are now in grid()")


ng = newgrid(grid, play)
ng.play()
ng.grid()

Fast, det är ett lite okonventionellt sätt att göra det på. Normalt så definierar du metoderna _i_ klassen:
Kod:
class newgrid():
   def __init__(self)
      pass

   def play(self):
      print("You are now in newgrid::play()")

   def grid(self):
      print("You are now in newgrid::grid()")


ng = newgrid()
ng.play()
ng.grid()

/K
__________________
Senast redigerad av kodsnickrarn 2019-03-11 kl. 11:43.
Citera
2019-03-11, 20:08
  #3
Medlem
Citat:
Ursprungligen postat av kodsnickrarn
Kod:
class newgrid():
   def __init__(self, grid, play)
      self.grid = grid
      self.play = play

def play():
   print("You are now in play()")

def grid():
   print("You are now in grid()")


ng = newgrid(grid, play)
ng.play()
ng.grid()

Fast, det är ett lite okonventionellt sätt att göra det på. Normalt så definierar du metoderna _i_ klassen:
Kod:
class newgrid():
   def __init__(self)
      pass

   def play(self):
      print("You are now in newgrid::play()")

   def grid(self):
      print("You are now in newgrid::grid()")


ng = newgrid()
ng.play()
ng.grid()

/K


Vänta va, är det där rätt svar nu?
Citera
2019-03-11, 20:12
  #4
Medlem
kodsnickrarns avatar
Citat:
Ursprungligen postat av melyhna
Vänta va, är det där rätt svar nu?

Hur menar du?
Citera
2019-03-11, 20:13
  #5
Medlem
Citat:
Ursprungligen postat av kodsnickrarn
Kod:
class newgrid():
   def __init__(self, grid, play)
      self.grid = grid
      self.play = play

def play():
   print("You are now in play()")

def grid():
   print("You are now in grid()")


ng = newgrid(grid, play)
ng.play()
ng.grid()

Fast, det är ett lite okonventionellt sätt att göra det på. Normalt så definierar du metoderna _i_ klassen:
Kod:
class newgrid():
   def __init__(self)
      pass

   def play(self):
      print("You are now in newgrid::play()")

   def grid(self):
      print("You are now in newgrid::grid()")


ng = newgrid()
ng.play()
ng.grid()

/K

Här är hela koden:

Kod:
import random

class matrix(object):
    value = 0 #Attributen sätts alltid till 0 när ett objekt skapas.
    selected = False
    mine = False

#Set up the grid;

class grid(object):
    def __init__(self, mines, grid_size):
        self.mines = mines
        self.grid = [['0' for i in range(int(grid_size))] for i in range(int(grid_size))] #"null matrix list"
        mines = place_mines(grid, mines) #place where the mines should be randomly
        for i,j in mines:
            grid[i][j]="x" #i row, j colomn
        grid=number(grid)
        return (grid, mines)

    def show_grid(object):
        grid=len(grid)
        horizon= " " + (4 * grid * "-")+"-" #the string "-" is a deafult value at first, but gets a value when we add our parameters: som isbn
        toplabel = toplabel + i + " "
        print(toplabel + "\n" + horizon)
        for idx, i in enumerate(grid): #denna kod som gör så att vi får den här matrisen
            for j in i:
                row = row + " "+ j + " |"  # det där absolutbeloppet som separerar 'matrisen' upp det.
            print(row + '\n' + horizon)
        print()

    def random_cell(grid):
            grid=len(grid)
            random=randomint(0, grid -1) #randomly select a number
            return()

    def next(grid, x,y):
        grid=len(grid)
        next=[]
        for i in range(-1, 2):
            for j in range(-1, 2):
                if i == 0 and j == 0:
                    continue
                elif -1 < (x + i) < grid and -1 < (y + j) < grid:
                    next.append((x + i, y + j))
        return next  # hitta alla celler "bredvid" den man klickat på

    def place_mines(grid, mines):
        mines = []
        next = next(grid, *start)
        for i in range(mines):
            cell = random_cell(grid)
            while cell == start or cell in mines or cell in next:
                cell = random_cell(grid)
            mines.append(cell)
        return()  # alla slumpmässiga celler (vart minorna ligger)


    def num(grid):
        for x, rad in enumerate(grid):
            for y, cell in enumerate(row):
                if cell != 'x': # får värden av 'grannarna'
                    var = [grid[r][c] for r, c in next(grid, x, y)] # räknar hur många som är minor då
                    grid[x][y] = str(var.count('x'))  # hur många runt "kanten" som är minor
        return()


    def display_cells(grid, curr_grid, x, y): # avslutar den om cellen liksom redan har visats
        if curr_grid[x][y] != " ":
            return
        currutnat[x_kordinat][y_kordinat] = rutnat[x_kordinat][y_kordinat] # visa nuvarande cell
        if rutnat[x_kordinat][y_kordinat] == '0': # få grannarna om cellerna runt om är tom
            for r, c in next(rutnat, x, y): # Upprepar för varje granne
                if curr_grid[r][c] != "F":
                    display_cell(grid, curr_grid, r, c)


    def play_again():
        val = input("Play again? y/n")
        return val.lower() == 'y'



    def play_game():
        grid_size = int(input("Choose the Width of the board: "))
        num = int(input("Choose the number of mines: "))
    #game_over = False
    #winner = False
        self.mines = mines
        mines = place_mines(grid, mines)
        grid1 = grid(grid_size, self.mines)
        while not gameOver:
            print(grid)
            print("Make your move:")
            x = int(input("x: "))
            y = int(input("y: "))
            grid.makeMove(x, y)
            gameOver = grid.hitMine(x, y)
            if grid.isWinner() and gameOver == False:
                gameOver = True
                winner = True

        print(grid)
        if winner:
            print("Congratulations. You Win!")
        else:
            print("You hit a mine. Game Over!")

#Först skriver du klassen.
            #Sen skapar du ett objekt av klassen
            #och använder objektet för att anropa metoden play_game. 

#class newgrid(object):
 #   def __init__(self, grid, play):
  #      self.grid = grid
   #     self.play=play

    #def play(self, play):
     #   self.play
#play()
Citera
2019-03-11, 20:18
  #6
Medlem
Citat:
Ursprungligen postat av kodsnickrarn
Kod:
class newgrid():
   def __init__(self, grid, play)
      self.grid = grid
      self.play = play

def play():
   print("You are now in play()")

def grid():
   print("You are now in grid()")


ng = newgrid(grid, play)
ng.play()
ng.grid()

Fast, det är ett lite okonventionellt sätt att göra det på. Normalt så definierar du metoderna _i_ klassen:
Kod:
class newgrid():
   def __init__(self)
      pass

   def play(self):
      print("You are now in newgrid::play()")

   def grid(self):
      print("You are now in newgrid::grid()")


ng = newgrid()
ng.play()
ng.grid()

/K

asså de var inuti koden förut, jag skrev hela min kod ovanför där uppe, och det ska ju självklart inte vara # där.
Citera
2019-03-11, 21:12
  #7
Medlem
kodsnickrarns avatar
Citat:
Ursprungligen postat av melyhna
asså de var inuti koden förut, jag skrev hel.a min kod ovanför där uppe, och det ska ju självklart inte vara # där.

Nä, jag fattar ingenting!?
Du får precisera frågan lite mer.
Jag anar att det rör sig om en skoluppgift där du fått ett ofullständigt program som du ska göra färdigt, men vad är egentligen frågan??
Citera
2019-03-11, 22:58
  #8
Medlem
Citat:
Ursprungligen postat av kodsnickrarn
Nä, jag fattar ingenting!?
Du får precisera frågan lite mer.
Jag anar att det rör sig om en skoluppgift där du fått ett ofullständigt program som du ska göra färdigt, men vad är egentligen frågan??

;p, i min kod, ovan, kan jag inte köra programmet för jag får fel att vid line 116, att play inte är definierat. så vet inte hur jag ska göra så den ska fungera
Citera
2019-03-12, 00:04
  #9
Medlem
Googlade, och det kan ju va så att jag anropa play(), utan att skapa ett objekt av newgrid. Men jag har ju gjort det???? eller vad e det som fattas för att det ska bli ett helt objekt?
Citera
2019-07-20, 21:54
  #10
Medlem
Svantevits avatar
Citat:
Ursprungligen postat av melyhna
Googlade, och det kan ju va så att jag anropa play(), utan att skapa ett objekt av newgrid. Men jag har ju gjort det???? eller vad e det som fattas för att det ska bli ett helt objekt?
Har du löst problemet? I kodsnutten du postade först definierar du ju inte play någonstans, inte så konstigt att den inte går att anropa. Kodsnickarn visade ju dig två exempel på hur du kan definiera play: som funktion och som metod (=funktion i klassen newgrid).
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback