Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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
C# 数组PYTHON中的索引器_C#_Python_Arrays_Function_Python 3.x - Fatal编程技术网

C# 数组PYTHON中的索引器

C# 数组PYTHON中的索引器,c#,python,arrays,function,python-3.x,C#,Python,Arrays,Function,Python 3.x,我正试图用Python编写这个C#函数,不幸的是我有一个错误:索引器:在Population.BinaryX.insert([I][j],dec)行中列出分配索引超出范围。谁能告诉我如何解决这个问题?!我怎么了 C#代码: public class Population { public float[] CodedX = new float[20]; public float[,] BinaryX = new float[10, 8]; } pr

我正试图用Python编写这个C#函数,不幸的是我有一个错误
索引器:在
Population.BinaryX.insert([I][j],dec)
行中列出分配索引超出范围。谁能告诉我如何解决这个问题?!我怎么了

C#代码:

public class Population
    {
        public float[] CodedX = new float[20];
        public float[,] BinaryX = new float[10, 8];
    }

private void BinaryTranslating()
        {
            int dec;
            int j = 0;
            for (var i = 0; i < 10; i++)
            {
                while (Population.CodedX[i] > 1 & j < 8)
                {
                    dec = (int)Population.CodedX[i] % 2;
                    Population.BinaryX[i, j] = dec;
                    Population.CodedX[i] /= 2;
                    j++;
                }
                j = 0;
            }
        }

 private void DecimalTranslating()
        {
            for (var i = 0; i < 10; i++)
            {
                Population.CodedX[i] = Population.BinaryX[i, 7] * 128 + Population.BinaryX[i, 6] * 64 + 
                                       Population.BinaryX[i, 5] * 32 + Population.BinaryX[i, 4] * 16 + 
                                       Population.BinaryX[i, 3] * 8 + Population.BinaryX[i, 2] * 4 + 
                                       Population.BinaryX[i, 1] * 2 + Population.BinaryX[i, 0];

            }
        }
class Population:
CodedX = []
BinaryX = [[], []]

class Application:
@staticmethod
    def binary_translating():
        j = 0
        for i in range(10):
            while Population.CodedX[i] > 1 & j < 8:
                dec = int(Population.CodedX[i]) % 2
                Population.BinaryX.insert([i][j], dec)
                Population.CodedX[i] /= 2
                j += 1
            j = 0

@staticmethod
    def decimal_translating():
        for i in range(10):
            new_item = Population.BinaryX[i][7] * 128 + Population.BinaryX[i][6] * 64 + Population.BinaryX[i][5] * 32 +\
                       Population.BinaryX[i][4] * 16 + Population.BinaryX[i][3] * 8 + Population.BinaryX[i][2] * 4 +\
                       Population.BinaryX[i][1] * 2 + Population.BinaryX[i][0]
            Population.CodedX.insert(i, new_item)
公共类人口
{
公共浮动[]CodedX=新浮动[20];
公共浮点数[,]BinaryX=新浮点数[10,8];
}
私有void二进制翻译()
{
国际数据中心;
int j=0;
对于(变量i=0;i<10;i++)
{
while(Population.CodedX[i]>1&j<8)
{
dec=(int)总体.CodedX[i]%2;
人口.BinaryX[i,j]=dec;
人口.CodedX[i]/=2;
j++;
}
j=0;
}
}
私有无效数据转换()
{
对于(变量i=0;i<10;i++)
{
Population.CodedX[i]=Population.BinaryX[i,7]*128+Population.BinaryX[i,6]*64+
人口.BinaryX[i,5]*32+人口.BinaryX[i,4]*16+
人口.BinaryX[i,3]*8+人口.BinaryX[i,2]*4+
人口.BinaryX[i,1]*2+人口.BinaryX[i,0];
}
}
Python代码:

public class Population
    {
        public float[] CodedX = new float[20];
        public float[,] BinaryX = new float[10, 8];
    }

private void BinaryTranslating()
        {
            int dec;
            int j = 0;
            for (var i = 0; i < 10; i++)
            {
                while (Population.CodedX[i] > 1 & j < 8)
                {
                    dec = (int)Population.CodedX[i] % 2;
                    Population.BinaryX[i, j] = dec;
                    Population.CodedX[i] /= 2;
                    j++;
                }
                j = 0;
            }
        }

 private void DecimalTranslating()
        {
            for (var i = 0; i < 10; i++)
            {
                Population.CodedX[i] = Population.BinaryX[i, 7] * 128 + Population.BinaryX[i, 6] * 64 + 
                                       Population.BinaryX[i, 5] * 32 + Population.BinaryX[i, 4] * 16 + 
                                       Population.BinaryX[i, 3] * 8 + Population.BinaryX[i, 2] * 4 + 
                                       Population.BinaryX[i, 1] * 2 + Population.BinaryX[i, 0];

            }
        }
class Population:
CodedX = []
BinaryX = [[], []]

class Application:
@staticmethod
    def binary_translating():
        j = 0
        for i in range(10):
            while Population.CodedX[i] > 1 & j < 8:
                dec = int(Population.CodedX[i]) % 2
                Population.BinaryX.insert([i][j], dec)
                Population.CodedX[i] /= 2
                j += 1
            j = 0

@staticmethod
    def decimal_translating():
        for i in range(10):
            new_item = Population.BinaryX[i][7] * 128 + Population.BinaryX[i][6] * 64 + Population.BinaryX[i][5] * 32 +\
                       Population.BinaryX[i][4] * 16 + Population.BinaryX[i][3] * 8 + Population.BinaryX[i][2] * 4 +\
                       Population.BinaryX[i][1] * 2 + Population.BinaryX[i][0]
            Population.CodedX.insert(i, new_item)
班级人数:
CodedX=[]
BinaryX=[],[]
班级申请:
@静力学方法
def binary_translating():
j=0
对于范围(10)内的i:
而人口.CodedX[i]>1&j<8:
dec=int(总体代码dx[i])%2
Population.BinaryX.insert([i][j],12月)
人口.CodedX[i]/=2
j+=1
j=0
@静力学方法
def decimal_translating():
对于范围(10)内的i:
新项目=人口.BinaryX[i][7]*128+人口.BinaryX[i][6]*64+人口.BinaryX[i][5]*32+\
人口.BinaryX[i][4]*16+人口.BinaryX[i][3]*8+人口.BinaryX[i][2]*4+\
Population.BinaryX[i][1]*2+Population.BinaryX[i][0]
填充.CodedX.insert(i,新项目)

考虑
Population.BinaryX.insert([i][j],dec)
中的
[i][j]
表达式。该表达式创建一个包含
i
值的1项列表,然后尝试从该列表中获取
j
第项

>>> i=1
>>> j=2
>>> [i][j]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
另一个选项是在子列表中插入:

@staticmethod
def binary_translating():
    Population.BinaryX = []
    j = 0
    for i in range(10):
        Population.BinaryX.insert([])
        while Population.CodedX[i] > 1 & j < 8:
            dec = int(Population.CodedX[i]) % 2
            Population.BinaryX[i].insert(j, dec)
            Population.CodedX[i] /= 2
            j += 1
        j = 0
@staticmethod
def binary_translating():
Population.BinaryX=[]
j=0
对于范围(10)内的i:
Population.BinaryX.insert([])
而人口.CodedX[i]>1&j<8:
dec=int(总体代码dx[i])%2
Population.BinaryX[i].插入(j,dec)
人口.CodedX[i]/=2
j+=1
j=0

考虑
Population.BinaryX.insert([i][j],dec)
中的
[i][j]
表达式。该表达式创建一个包含
i
值的1项列表,然后尝试从该列表中获取
j
第项

>>> i=1
>>> j=2
>>> [i][j]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
另一个选项是在子列表中插入:

@staticmethod
def binary_translating():
    Population.BinaryX = []
    j = 0
    for i in range(10):
        Population.BinaryX.insert([])
        while Population.CodedX[i] > 1 & j < 8:
            dec = int(Population.CodedX[i]) % 2
            Population.BinaryX[i].insert(j, dec)
            Population.CodedX[i] /= 2
            j += 1
        j = 0
@staticmethod
def binary_translating():
Population.BinaryX=[]
j=0
对于范围(10)内的i:
Population.BinaryX.insert([])
而人口.CodedX[i]>1&j<8:
dec=int(总体代码dx[i])%2
Population.BinaryX[i].插入(j,dec)
人口.CodedX[i]/=2
j+=1
j=0

请确保
Population.BinaryX
是一个有效的实体,并且其中至少包含10个元素,因为您正在运行循环10次。这同样适用于
CodedX

如果其中任何一个都没有至少10个元素,那么您将得到

索引器:列表分配索引超出范围

试试

这是tdelaney提到的预分配

如果您查看应用程序类中的每个函数,它们尝试使用BinaryX或CodedX数组,但是如果这些数组中没有任何元素,那么python将如何索引到它们中

我的意思是在调用
decimal\u translating()
函数之前,
Population.BinrayX
必须包含元素。它不能是空数组

类似地,在调用
binary\u translating()
函数之前,
Population.CodedX
必须包含元素

[编辑#1] 在您的评论之后,并尝试理解您的代码。以下是我所拥有的:-

class Population(object):
    def __init__(self):
        self.CodedX = [0 for i in range(10)]  # as per your C# code
        self.BinaryX = []
        # debug code to fill CodedX array - remove it
        for i in range(10):
            self.CodedX[i] = int(761)

    def binary_translating(self):
        for i in range(10):
            j = 0
            self.BinaryX.append([0 for k in range(10)])
            while (self.CodedX[i] > 0) and (j < 10):
                dec = int(self.CodedX[i] % 2)
                self.BinaryX[i][j] = dec  # this will append at j
                self.CodedX[i] = int(self.CodedX[i] / 2)
                j += 1
        # debug code to print - remove it
        print(self.BinaryX)
        # debug code to clear CodedX - remove it
        for i in range(10):
            self.CodedX[i] = int(0)

    def decimal_translating(self):
        for i in range(10):
            value = self.BinaryX[i][7] * 128 + self.BinaryX[i][6] * 64 + self.BinaryX[i][5] * 32 + \
                             self.BinaryX[i][4] * 16 + self.BinaryX[i][3] * 8 + self.BinaryX[i][2] * 4 + \
                             self.BinaryX[i][1] * 2 + self.BinaryX[i][0]
            self.CodedX[i] = value
        print(self.CodedX)


pop = Population()

pop.binary_translating()
pop.decimal_translating()

[编辑#2]

请确保
填充.BinaryX
是一个有效的实体,其中至少包含10个元素,因为您正在运行循环10次。这同样适用于
CodedX

如果其中任何一个都没有至少10个元素,那么您将得到

索引器:列表分配索引超出范围

试试

这是tdelaney提到的预分配

如果您查看应用程序类中的每个函数,它们尝试使用BinaryX或CodedX数组,但是如果这些数组中没有任何元素,那么python将如何索引到它们中

我的意思是在调用
decimal\u translating()
函数之前,
Population.BinrayX
必须包含元素。它不能是空数组

类似地,在调用
binary\u translating()
函数之前,
Population.CodedX
必须包含元素

[编辑#1] 在您的评论之后,并尝试理解您的代码。以下是我所拥有的:-

class Population(object):
    def __init__(self):
        self.CodedX = [0 for i in range(10)]  # as per your C# code
        self.BinaryX = []
        # debug code to fill CodedX array - remove it
        for i in range(10):
            self.CodedX[i] = int(761)

    def binary_translating(self):
        for i in range(10):
            j = 0
            self.BinaryX.append([0 for k in range(10)])
            while (self.CodedX[i] > 0) and (j < 10):
                dec = int(self.CodedX[i] % 2)
                self.BinaryX[i][j] = dec  # this will append at j
                self.CodedX[i] = int(self.CodedX[i] / 2)
                j += 1
        # debug code to print - remove it
        print(self.BinaryX)
        # debug code to clear CodedX - remove it
        for i in range(10):
            self.CodedX[i] = int(0)

    def decimal_translating(self):
        for i in range(10):
            value = self.BinaryX[i][7] * 128 + self.BinaryX[i][6] * 64 + self.BinaryX[i][5] * 32 + \
                             self.BinaryX[i][4] * 16 + self.BinaryX[i][3] * 8 + self.BinaryX[i][2] * 4 + \
                             self.BinaryX[i][1] * 2 + self.BinaryX[i][0]
            self.CodedX[i] = value
        print(self.CodedX)


pop = Population()

pop.binary_translating()
pop.decimal_translating()

[edit#2]

您不应该使用逐位运算符,对于布尔值,请使用Python中适当的“AND”运算符。您能告诉我们如何定义
填充.BinaryX
?您能发布CodedX的示例吗