Я создаю игру для моей сестры и хочу, чтобы функция возвращала переменную списка, чтобы я могла передать ее другой переменной.
Соответствующий код выглядит следующим образом:
def startNewGame():
while 1:
#Introduction:
print
print """Hello,
You will now be guided through the setup process.
There are 7 steps to this.
You can cancel setup at any time by typing 'cancelSetup'
Thankyou"""
#Step 1 (Name):
print
print """Step 1 of 7:
Type in a name for your PotatoHead:
"""
inputPHName = raw_input('|Enter Name:|')
if inputPHName == 'cancelSetup':
sys.exit()
#Step 2 (Gender):
print
print """Step 2 of 7:
Choose the gender of your PotatoHead:
input either 'm' or 'f'
"""
inputPHGender = raw_input('|Enter Gender:|')
if inputPHGender == 'cancelSetup':
sys.exit()
#Step 3 (Colour):
print
print """Step 3 of 7:
Choose the colour your PotatoHead will be:
Only Red, Blue, Green and Yellow are currently supported
"""
inputPHColour = raw_input('|Enter Colour:|')
if inputPHColour == 'cancelSetup':
sys.exit()
#Step 4 (Favourite Thing):
print
print """Step 4 of 7:
Type your PotatoHead's favourite thing:
"""
inputPHFavThing = raw_input('|Enter Favourite Thing:|')
if inputPHFavThing == 'cancelSetup':
sys.exit()
# Step 5 (First Toy):
print
print """Step 5 of 7:
Choose a first toy for your PotatoHead:
"""
inputPHFirstToy = raw_input('|Enter First Toy:|')
if inputPHFirstToy == 'cancelSetup':
sys.exit()
#Step 6 (Check stats):
while 1:
print
print """Step 6 of 7:
Check the following details to make sure that they are correct:
"""
print
print """Name:\t\t\t""" + inputPHName + """
Gender:\t\t\t""" + inputPHGender + """
Colour:\t\t\t""" + inputPHColour + """
Favourite Thing:\t""" + inputPHFavThing + """
First Toy:\t\t""" + inputPHFirstToy + """
"""
print
print "Enter 'y' or 'n'"
inputMCheckStats = raw_input('|Is this information correct?|')
if inputMCheckStats == 'cancelSetup':
sys.exit()
elif inputMCheckStats == 'y':
break
elif inputMCheckStats == 'n':
print "Re-enter info: ..."
print
break
else:
"The value you entered was incorrect, please re-enter your choice"
if inputMCheckStats == 'y':
break
#Step 7 (Define variables for the creation of the PotatoHead):
MFCreatePH = []
print
print """Step 7 of 7:
Your PotatoHead will now be created...
Creating variables...
"""
MFCreatePH = [inputPHName, inputPHGender, inputPHColour, inputPHFavThing, inputPHFirstToy]
time.sleep(1)
print "inputPHName"
print
time.sleep(1)
print "inputPHFirstToy"
print
return MFCreatePH
print "Your PotatoHead varibles have been successfully created!"
Затем она передается другой функции, которая была импортирована из другого модуля
from potatohead import *
...
welcomeMessage()
MCreatePH = startGame()
myPotatoHead = PotatoHead(MCreatePH)
код объекта PotatoHead находится в модуле potatohead.py, который был импортирован выше, и выглядит следующим образом:
class PotatoHead:
#Initialise the PotatoHead object:
def __init__(self, data):
self.data = data #Takes the data from the start new game function - see main.py
#Defines the PotatoHead starting attributes:
self.name = data[0]
self.gender = data[1]
self.colour = data[2]
self.favouriteThing = data[3]
self.firstToy = data[4]
self.age = '0.0'
self.education = [self.eduScience, self.eduEnglish, self.eduMaths] = '0.0', '0.0', '0.0'
self.fitness = '0.0'
self.happiness = '10.0'
self.health = '10.0'
self.hunger = '0.0'
self.tiredness = 'Not in this version'
self.toys = []
self.toys.append(self.firstToy)
self.time = '0'
#Sets data lists for saving, loading and general use:
self.phData = (self.name, self.gender, self.colour, self.favouriteThing, self.firstToy)
self.phAdvData = (self.name, self.gender, self.colour, self.favouriteThing, self.firstToy,
self.age, self.education, self.fitness, self.happiness, self.health, self.hunger,
self.tiredness, self.toys)
Однако, когда я запускаю программу, появляется эта ошибка:
Traceback (most recent call last):
File "/Users/Jasper/Documents/Programming/Potato Head Game/Current/main.py", line 158, in <module>
myPotatoHead = PotatoHead(MCreatePH)
File "/Users/Jasper/Documents/Programming/Potato Head Game/Current/potatohead.py", line 15, in __init__
self.name = data[0]
TypeError: 'NoneType' object is unsubscriptable
Что я делаю не так?
----- EDIT -----
Программа заканчивается так:
Шаг 7 из 7:
Your PotatoHead will now be created...
Creating variables...
inputPHName
inputPHFirstToy
Затем он идет к Tracback
----- EDIT2 -----
Это ТОЧНЫЙ код, который я запускаю полностью:
#+--------------------------------------+#
#| main.py |#
#| A main module for the Potato Head |#
#| Game to pull the other modules |#
#| together and control through user |#
#| input |#
#| Author: |#
#| Date Created / Modified: |#
#| 3/2/10 | 20/2/10 |#
#+--------------------------------------+# Tested: No
#Import the required modules:
import time
import random
import sys
from potatohead import *
from toy import *
#Start the Game:
def welcomeMessage():
print "----- START NEW GAME -----------------------"
print "==Print Welcome Message=="
print "loading... \t loading... \t loading..."
time.sleep(1)
print "loading..."
time.sleep(1)
print "LOADED..."
print; print; print;
print """Hello,
Welcome to the Potato Head Game. In this game you can create
a Potato Head, and look after it, like a Virtual Pet.
This game is constantly being updated and expanded. Please
look out for updates.
"""
#Choose whether to start a new game or load a previously saved game:
def startGame():
while 1:
print "--------------------"
print """ Choose an option:
New_Game
or
Load_Game
"""
startGameInput = raw_input('>>> >')
if startGameInput == 'New_Game':
startNewGame()
break
elif startGameInput == 'Load_Game':
print "This function is not yet supported"
print "Try Again"
print
else:
print "You must have mistyped the command: Type either 'New_Game' or 'Load_Game'"
print
#Set the new game up:
def startNewGame():
while 1:
#Introduction:
print
print """Hello,
You will now be guided through the setup process.
There are 7 steps to this.
You can cancel setup at any time by typing 'cancelSetup'
Thankyou"""
#Step 1 (Name):
print
print """Step 1 of 7:
Type in a name for your PotatoHead:
"""
inputPHName = raw_input('|Enter Name:|')
if inputPHName == 'cancelSetup':
sys.exit()
#Step 2 (Gender):
print
print """Step 2 of 7:
Choose the gender of your PotatoHead:
input either 'm' or 'f'
"""
inputPHGender = raw_input('|Enter Gender:|')
if inputPHGender == 'cancelSetup':
sys.exit()
#Step 3 (Colour):
print
print """Step 3 of 7:
Choose the colour your PotatoHead will be:
Only Red, Blue, Green and Yellow are currently supported
"""
inputPHColour = raw_input('|Enter Colour:|')
if inputPHColour == 'cancelSetup':
sys.exit()
#Step 4 (Favourite Thing):
print
print """Step 4 of 7:
Type your PotatoHead's favourite thing:
"""
inputPHFavThing = raw_input('|Enter Favourite Thing:|')
if inputPHFavThing == 'cancelSetup':
sys.exit()
# Step 5 (First Toy):
print
print """Step 5 of 7:
Choose a first toy for your PotatoHead:
"""
inputPHFirstToy = raw_input('|Enter First Toy:|')
if inputPHFirstToy == 'cancelSetup':
sys.exit()
#Step 6 (Check stats):
while 1:
print
print """Step 6 of 7:
Check the following details to make sure that they are correct:
"""
print
print """Name:\t\t\t""" + inputPHName + """
Gender:\t\t\t""" + inputPHGender + """
Colour:\t\t\t""" + inputPHColour + """
Favourite Thing:\t""" + inputPHFavThing + """
First Toy:\t\t""" + inputPHFirstToy + """
"""
print
print "Enter 'y' or 'n'"
inputMCheckStats = raw_input('|Is this information correct?|')
if inputMCheckStats == 'cancelSetup':
sys.exit()
elif inputMCheckStats == 'y':
break
elif inputMCheckStats == 'n':
print "Re-enter info: ..."
print
break
else:
"The value you entered was incorrect, please re-enter your choice"
if inputMCheckStats == 'y':
break
#Step 7 (Define variables for the creation of the PotatoHead):
MFCreatePH = []
print
print """Step 7 of 7:
Your PotatoHead will now be created...
Creating variables...
"""
MFCreatePH = [inputPHName, inputPHGender, inputPHColour, inputPHFavThing, inputPHFirstToy]
time.sleep(1)
print "inputPHName"
print
time.sleep(1)
print "inputPHFirstToy"
print
return MFCreatePH
print "Your PotatoHead varibles have been successfully created!"
#Run Program:
welcomeMessage()
MCreatePH = startGame()
myPotatoHead = PotatoHead(MCreatePH)
Модуль potatohead.py выглядит следующим образом:
#+--------------------------------------+#
#| potatohead.py |#
#| A module for the Potato Head Game |#
#| Author: |#
#| Date Created / Modified: |#
#| 24/1/10 | 24/1/10 |#
#+--------------------------------------+# Tested: Yes (24/1/10)
#Create the PotatoHead class:
class PotatoHead:
#Initialise the PotatoHead object:
def __init__(self, data):
self.data = data #Takes the data from the start new game function - see main.py
#Defines the PotatoHead starting attributes:
self.name = data[0]
self.gender = data[1]
self.colour = data[2]
self.favouriteThing = data[3]
self.firstToy = data[4]
self.age = '0.0'
self.education = [self.eduScience, self.eduEnglish, self.eduMaths] = '0.0', '0.0', '0.0'
self.fitness = '0.0'
self.happiness = '10.0'
self.health = '10.0'
self.hunger = '0.0'
self.tiredness = 'Not in this version'
self.toys = []
self.toys.append(self.firstToy)
self.time = '0'
#Sets data lists for saving, loading and general use:
self.phData = (self.name, self.gender, self.colour, self.favouriteThing, self.firstToy)
self.phAdvData = (self.name, self.gender, self.colour, self.favouriteThing, self.firstToy,
self.age, self.education, self.fitness, self.happiness, self.health, self.hunger,
self.tiredness, self.toys)
#Define the phStats variable, enabling easy display of PotatoHead attributes:
def phDefStats(self):
self.phStats = """Your Potato Head's Stats are as follows:
----------------------------------------
Name: \t\t""" + self.name + """
Gender: \t\t""" + self.gender + """
Colour: \t\t""" + self.colour + """
Favourite Thing: \t""" + self.favouriteThing + """
First Toy: \t""" + self.firstToy + """
Age: \t\t""" + self.age + """
Education: \t""" + str(float(self.eduScience) + float(self.eduEnglish) + float(self.eduMaths)) + """
-> Science: \t""" + self.eduScience + """
-> English: \t""" + self.eduEnglish + """
-> Maths: \t""" + self.eduMaths + """
Fitness: \t""" + self.fitness + """
Happiness: \t""" + self.happiness + """
Health: \t""" + self.health + """
Hunger: \t""" + self.hunger + """
Tiredness: \t""" + self.tiredness + """
Toys: \t\t""" + str(self.toys) + """
Time: \t\t""" + self.time + """
"""
#Change the PotatoHead's favourite thing:
def phChangeFavouriteThing(self, newFavouriteThing):
self.favouriteThing = newFavouriteThing
phChangeFavouriteThingMsg = "Your Potato Head's favourite thing is " + self.favouriteThing + "."
#"Feed" the Potato Head i.e. Reduce the 'self.hunger' attribute's value:
def phFeed(self):
if float(self.hunger) >=3.0:
self.hunger = str(float(self.hunger) - 3.0)
elif float(self.hunger) < 3.0:
self.hunger = '0.0'
self.time = str(int(self.time) + 1) #Pass time
#"Exercise" the Potato Head if between the ages of 5 and 25:
def phExercise(self):
if float(self.age) < 5.1 or float(self.age) > 25.1:
print "This Potato Head is either too young or too old for this activity!"
else:
if float(self.fitness) <= 8.0:
self.fitness = str(float(self.fitness) + 2.0)
elif float(self.fitness) > 8.0:
self.fitness = '10.0'
self.time = str(int(self.time) + 1) #Pass time
#"Teach" the Potato Head:
def phTeach(self, subject):
if subject == 'Science':
if float(self.eduScience) <= 9.0:
self.eduScience = str(float(self.eduScience) + 1.0)
elif float(self.eduScience) > 9.0 and float(self.eduScience) < 10.0:
self.eduScience = '10.0'
elif float(self.eduScience) == 10.0:
print "Your Potato Head has gained the highest level of qualifications in this subject! It cannot learn any more!"
elif subject == 'English':
if float(self.eduEnglish) <= 9.0:
self.eduEnglish = str(float(self.eduEnglish) + 1.0)
elif float(self.eduEnglish) > 9.0 and float(self.eduEnglish) < 10.0:
self.eduEnglish = '10.0'
elif float(self.eduEnglish) == 10.0:
print "Your Potato Head has gained the highest level of qualifications in this subject! It cannot learn any more!"
elif subject == 'Maths':
if float(self.eduMaths) <= 9.0:
self.eduMaths = str(float(self.eduMaths) + 1.0)
elif float(self.eduMaths) > 9.0 and float(self.eduMaths) < 10.0:
self.eduMaths = '10.0'
elif float(self.eduMaths) == 10.0:
print "Your Potato Head has gained the highest level of qualifications in this subject! It cannot learn any more!"
else:
print "That subject is not an option..."
print "Please choose either Science, English or Maths"
self.time = str(int(self.time) + 1) #Pass time
#Increase Health:
def phGoToDoctor(self):
self.health = '10.0'
self.time = str(int(self.time) + 1) #Pass time
#Sleep: Age, change stats: #(Time Passes)
def phSleep(self):
self.time = '0' #Resets time for next 'day' (can do more things next day)
#Increase hunger:
if float(self.hunger) <= 5.0:
self.hunger = str(float(self.hunger) + 5.0)
elif float(self.hunger) > 5.0:
self.hunger = '10.0'
#Lower Fitness:
if float(self.fitness) >= 0.5:
self.fitness = str(float(self.fitness) - 0.5)
elif float(self.fitness) < 0.5:
self.fitness = '0.0'
#Lower Health:
if float(self.health) >= 0.5:
self.health = str(float(self.health) - 0.5)
elif float(self.health) < 0.5:
self.health = '0.0'
#Lower Happiness:
if float(self.happiness) >= 2.0:
self.happiness = str(float(self.happiness) - 2.0)
elif float(self.happiness) < 2.0:
self.happiness = '0.0'
#Increase the Potato Head's age:
self.age = str(float(self.age) + 0.1)
Игра все еще находится в стадии разработки - могут быть части модулей, которые еще не завершены, но я не думаю, что они вызывают проблему