下午好, 我在python中有一个关于作业的问题 这几乎是正确的,但最后一部分我无法弄清楚
def create_line(letters,x,numElems):
sizeofLetters=len(letters)
another_list = []
i=0
while(i!=numElems):
if(i+x*numElems==sizeofLetters):
break
another_list.append(letters[i+x*numElems])
i +=1
return another_list
def create_key(letters):
sizeofList = len(letters)
conjLetters = []
x=0
i=0
raiz = sqrt(sizeofList)
numTuples=raiz
if(isinstance(raiz,float)==True):
numTuples = int(raiz)+1
raiz = int(raiz)+1
numElems=sizeofList/raiz
while(x!=numTuples-1):
line = tuple(create_line(letters,x,numElems))
x+=1
conjLetters.append(line)
return tuple(conjLetters)
create_key接收一个字符元组(例如:('A','B','C','D')。将其转换为元组元组。元组的数量是大小的平方根,总是向上舍入(4,1 = 5)。每个元组的元素数量是通过除以每个元组数的元组的len来指定的。
create_line将收到的每个字母附加到返回的列表中,返回的每个列表的条件最多为每个列表的numElems。
create_key之后将所有列表(同时转换为元组)附加到返回它的元组元组中。
所以我的问题是当我执行此代码时,如果字母=('A','B','C','D','E','F','G','H','我','J','','L','M','N','O','P','Q','R','S','T','U', 'V','X','Z','。')
我的输出应该是(('A','B','C','D','E'),('F','G','H','I',' J'),('','L','M','N','O'),('P','Q','R','S','T'),('U ','V','X','Z','。'),()) 没有最终元组,这只发生在root为int时(例如25,36等)
感谢您的帮助! 若昂
答案 0 :(得分:1)
sqrt
的结果将始终为浮点数(如果为25,则为5.0
)。这就是为什么你总是将1添加到整数表示的原因,如果数字是整数的话,它会错误地表示数字。相反,使用math.ceil
,如果它已经是整数,则返回下一个最高整数或相同数字:
from math import sqrt, ceil
...
def create_key(letters):
sizeofList = len(letters)
conjLetters = []
x = 0
i = 0
raiz = ceil(sqrt(sizeofList))
numTuples = raiz
numElems = sizeofList // raiz # Python 3 compatibility
while x != numTuples-1:
line = tuple(create_line(letters, x, numElems))
x += 1
conjLetters.append(line)
return tuple(conjLetters)