gpt4 book ai didi

python - 从 Python 中的函数返回列表

转载 作者:行者123 更新时间:2023-11-28 22:07:18 25 4
gpt4 key购买 nike

我正在为我妹妹创建一个游戏,我想要一个函数来返回一个列表变量,这样我就可以将它传递给另一个变量。

相关代码如下:

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

我做错了什么?

-----编辑-----

程序这样结束:

Step 7 of 7:

Your PotatoHead will now be created...

Creating variables...

inputPHName

inputPHFirstToy

然后进入Tracback

-----编辑2-----

这是我正在运行的完整代码:

#+--------------------------------------+#
#| 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)

游戏仍在开发中 - 可能有部分模块不完整,但我不认为它们是导致问题的原因

最佳答案

首先,我必须说你正在为初学者编写好的代码,尽管你可以通过编写一个函数来改进 startNewGame,以便在循环中获取用户输入,而不是一次又一次地编写相同的代码。

我复制了你的代码,它运行没有问题,虽然我做了一个小改动

你在做什么

MCreatePH = startGame()

但是你还没有定义startGame?所以如果用 startNewGame 替换它就可以了

MCreatePH = startNewGame()

所以你可能在某处定义了 startGame 但它什么也没返回?

关于python - 从 Python 中的函数返回列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2300963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com