Warum funktioniert das Hinzufügen von Objekten zu globalen Listen während der Objektinitialisierung, jedoch nicht nach dPython

Python-Programme
Anonymous
 Warum funktioniert das Hinzufügen von Objekten zu globalen Listen während der Objektinitialisierung, jedoch nicht nach d

Post by Anonymous »

Ich schreibe ein sehr einfaches textbasiertes Fluchtspiel, um die Grundlagen zu üben, die ich bisher gelernt habe. Ich führe es gerade in einem Online -Redakteur aus. Ich hatte Probleme, Klassenobjekte zu einer globalen Liste hinzuzufügen, und erfuhr, dass ich die Objekte initialisierte und dann die Liste anschließend hinzufügte. Nach dem Umschreiben so, dass die Objekte während ihrer Initialisierung zur Liste hinzugefügt wurden, funktionierte es. Warum? (Das Spiel ist noch nicht fertig, wie Sie sehen werden, ich möchte nur, was passiert, bevor ich fortfahre.) < /P>
Original, nicht funktioniert: < /p>

Code: Select all

class items():
def __init__(self, item, canOpen):
self.item = item
self.canOpen = canOpen

def pickup():
choice = input(f"There's some stuff on this shelf: {freeItems} - What will you pick up?")
#When freeItems is called, it displays `[, ]`
if choice not in freeItems:
print(f"What? There's no {choice} here. Choose again.")
#This runs no matter what I input, presumably because of the calling issue.
choice = input()
else:
playerInventory.append(choice)
freeItems.remove(choice)
print(f"""{choice} added to inventory!
These items remain on the shelf: {freeItems}
Let's try opening the door.""")

key = items("key",True)
flashlight = items("flashlight",False)
mirror = items("mirror",False)

freeItems = [key, flashlight, mirror]
playerInventory = []

playerName = input("Hi there! What's your name?")
print(f"Hi, {playerName}. So, bad news: you're trapped in this room. Good news: Your trusty disembodied narrator is here to help!")

pickup()
< /code>
Neu, funktioniert: < /p>
freeItems = []
playerInventory = []

class items():
def __init__(self, item, canOpen):
self.item = item
self.canOpen = canOpen
freeItems.append(self.item) #This is the new code that made it work

def pickup():
choice = input(f"There's some stuff on this shelf: {freeItems} - What will you pick up?")
if choice not in freeItems:
print(f"What? There's no {choice} here. Choose again.")
choice = input()
else:
playerInventory.append(choice)
freeItems.remove(choice)
print(f"""{choice} added to inventory!
These items remain on the shelf: {freeItems}
Let's try opening the door.""")

key = items("key",True)
flashlight = items("flashlight",False)
mirror = items("mirror",False)

playerName = input("Hi there! What's your name?")
print(f"Hi, {playerName}. So, bad news: you're trapped in this room. Good news: Your trusty disembodied narrator is here to help!")

pickup()
< /code>
Im Originalcode habe ich versucht, vorhandene Klassenobjekte zu einer globalen Liste hinzuzufügen. Ich erwartete, dass die Objekte nur in der Liste stehen würden, als hätte ich eine normale Variable hinzugefügt. Was tatsächlich passiert ist, ist diese Ausgabe, wenn die Liste aufgerufen wurde: [, ] 
und ich konnte die Liste der Liste anschließend nicht für den beabsichtigten Zweck der Liste verwenden. Dies funktionierte wie beabsichtigt. Ich verstehe einfach nicht, was der Unterschied zum Programm war.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post