Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中奇怪的循环?_Python - Fatal编程技术网

python中奇怪的循环?

python中奇怪的循环?,python,Python,我是python新手,但我有基本的java背景。要面对的是学习曲线,所以我遇到了麻烦。特别是这个循环 from random import randint; class simpleAI: inputMatter = 0; inputEnergyString = 0; inputEnergy = 0; resultMatter = 0; resultEnergy = 0; inputMatterMemory = []; inputEnergyMemory = []; resultMatterMe

我是python新手,但我有基本的java背景。要面对的是学习曲线,所以我遇到了麻烦。特别是这个循环

from random import randint;
class simpleAI:
inputMatter = 0;
inputEnergyString = 0;
inputEnergy = 0;
resultMatter = 0;
resultEnergy = 0;
inputMatterMemory = [];
inputEnergyMemory = [];
resultMatterMemory = [];
resultEnergyMemory = [];
searchIndex = 0;
found = 0;
lookin = 0;
lookingEnergy = 0;

def cycle(self):
    self.inputMatter = input("Matter: ");
    self.inputMatter = int(self.inputMatter, 10);
    self.inputMatterMemory.append(self.inputMatter);
    self.inputEnergyString = input("Energy: ");
    self.inputEnergy = int(self.inputEnergyString, 10);
    self.inputEnergyMemory.append(self.inputEnergy);
    #Check for an event that resulted in positive energy
    while(self.searchIndex < self.resultEnergyMemory.__len__()):
        print("we are foring!");
        if(self.inputEnergyMemory.__getitem__((self.inputMatterMemory.index(self.inputMatter))) == self.inputEnergy):
             print("we are iffy!");
             self.resultMatter = self.resultMatterMemory.__getitem__(self.inputMatterMemory.index(self.inputMatter));
             self.resultEnergy = self.resultEnergyMemory.__getitem__(self.inputEnergyMemory.index(self.inputEnergy));
             self.found = 1;
             break;

        else:
            self.searchIndex = self.searchIndex + 1;

    if(self.found == 0):
        self.resultMatter = randint(0, 256);
        self.resultMatterMemory.append(self.resultMatter);
        self.resultEnergy = randint(0, 256);
        self.resultEnergyMemory.append(self.resultEnergy);
        print("Creating new pair...");
        print("Result matter: ", self.resultMatter);
        print("Result Energy: ", self.resultEnergy);
    elif(self.found == 1):
        print("Found positive pair from memory");
        print("Result matter: ", self.resultMatter);
        print("Result memory: ", self.resultEnergy);

    self.inputMatter = 0;
    self.inputEnergyString = 0;
    self.inputEnergy = 0;
    self.resultMatter = 0;
    self.searchIndex = 0;
    self.found = 0;
来自随机导入randint;
类simpleAI:
输入物质=0;
inputenergysting=0;
输入能量=0;
结果材料=0;
结果能量=0;
inputMatterMemory=[];
输入能量记忆=[];
结果模式内存=[];
resultenergymomery=[];
searchIndex=0;
发现=0;
lookin=0;
lookingEnergy=0;
def循环(自):
self.inputMatter=输入(“物质:”);
self.inputMatter=int(self.inputMatter,10);
self.inputMatterMemory.append(self.inputMatter);
self.inputenergysting=输入(“能量:”);
self.inputEnergy=int(self.inputenergysting,10);
self.inputenergymomery.append(self.inputEnergy);
#检查导致正能量的事件
while(self.searchIndex

它在第一次迭代中产生正确的结果,但在其他迭代中返回到“创建”一个新的对,即使在之前输入时它应该返回一个对。我做错了什么

你为自己做了很多额外的工作。不需要维护多个并行数组,只需创建一个单独的类将所有数据保存在一起,只需循环使用该类的单个数组即可

from random import randint;

class MatterEnergyData:
    def __init__(self, inputMatter, inputEnergy, resultMatter, resultEnergy):
        self.inputMatter = inputMatter
        self.inputEnergy = inputEnergy
        self.resultMatter = resultMatter
        self.resultEnergy = resultEnergy

    def __str__(self):
        return "Result matter: %s\r\nResult energy: %s" % \ 
            self.resultMatter, self.resultEnergy

class simpleAI:
    matterEnergyDataPoints = []

    def cycle(self):
        inputMatter = int(input("Matter: "))
        inputEnergy = int(input("Energy: "))
        resultObj = None
        for obj in self.matterEnergyDataPoints:
            if obj.inputEnergy == inputEnergy and obj.inputMatter == inputMatter:
                print("Found positive pair from memory")
                resultObj = obj
                break

        if resultObj == None:
            print("Creating new pair...")
            resultObj = MatterEnergyData(inputMatter, inputEnergy, randint(0, 256), randint(0, 256))
            self.matterEnergyDataPoints.append(resultObj)

        print resultObj

一旦你完成了这项工作,请发表一篇文章,因为这是学习编写更干净Python代码的好机会。我假设这是一个转录错误“…即使它应该返回一对”。什么意思?我在这段代码中没有看到
return
语句。你能添加一些关于这应该做什么的信息吗?从我所看到的,它接受了物质和能量的值,看看这些输入值以前是否见过。如果有,则打印相应的结果。如果不是,则为这些输入创建并存储随机结果,然后打印出来。这是对的吗?穿梭机,我会把它贴在coderview上,谢谢!