我发现我的python代码非常慢,使用8分钟完成比较1分钟到freebasic
任何人都可以建议一些优化
首先创建digit_array [“a”,“b”,“c”,“d”,“e”,“f”,“g”,“h”,“i”,“j”]。<登记/>
除它,得到余数,一次又一次,将它存储到array_index [],1作为最后一位数
否则if和else代码来处理不完全除法的最后一次迭代
将最大索引存储为变量i
然后将array_index从最高值循环到1,将其映射到digit_array,
然后生成一个字符串(代码注释)
补充:20120903
我这是用digit_array创建字母组合的字符串,所以我可以跳过一些不常见的字母,如'q''z'或一些数字如'4'
currpos可以让我从上次开始
x让我调整digit_array中的总字母数,可以是a-z + A-Z + 0-9 +''
currpos_end 1024th将给予,
结果1024如果digit_array是['0','1','2','3','4','5','6','7','8','9'],x = 10个
如果digit_array是['a','b','c','d','e','f','g','h','i','j'],则x = 10个
结果1467如果digit_array是['0','1','2','3','4','5','6','7','8'],x = 9 >
结果2000如果digit_array是['0','1','2','3','4','5','6','7'],x = 8
现在我可以打印结果了,只是性能慢了
python 3代码,
digit_array=[]
for i in range(0, 10): # range(10) ----> 0 1 2 3 4 ... 9
digit_array.append("")
digit_array[0] = "a"
digit_array[1] = "b"
digit_array[2] = "c"
digit_array[3] = "d"
digit_array[4] = "e"
digit_array[5] = "f"
digit_array[6] = "g"
digit_array[7] = "h"
digit_array[8] = "i"
digit_array[9] = "j"
array_index=[]
for i in range(0, 51):
array_index.append(0)
currpos = 0
currpos_end = pow((26+10+1),5)
#currpos_end = 1024
print (currpos)
currpos2 = currpos
x = 10 # ubound digit_array + 1, ("0","1") binary then x = 2
print ()
for currpos in range(currpos, currpos_end):
currpos2 = currpos
i = 1
while True :
if currpos2 > x:
array_index[i] = currpos2 % x
currpos2 = int(currpos2 / x)
elif currpos2 == x:
array_index[i] = 0
i += 1
array_index[i] = 1
break
else:
array_index[i] = currpos2
break
i += 1
print (i, " . ", currpos, currpos2)
for j in range(i , 1, -1):
# break #uncomment this and comment next 3 lines for speed testing
print (digit_array[array_index[j]], end='')
print (digit_array[array_index[1]], end='')
print ()
try:
input(".")
except:
pass
freebasic code,
Dim digit_array(0 To 100) As String
digit_array(0) = "a"
digit_array(1) = "b"
digit_array(2) = "c"
digit_array(3) = "d"
digit_array(4) = "e"
digit_array(5) = "f"
digit_array(6) = "g"
digit_array(7) = "h"
digit_array(8) = "i"
digit_array(9) = "j"
Dim array_index(0 To 50) As ULongInt
For i As Integer = 0 To 50
array_index(i) = 0
Next
Dim As ULongInt currpos
Dim As ULongInt currpos_end
Dim As ULongInt currpos2
Dim As ULongInt x = 10 'ubound digit_array + 1, ("0","1") binary then x = 2
Dim As ULongInt i
currpos = 0
currpos_end = (26+10+1)^5
'currpos_end = 1024
Print currpos
currpos2 = currpos
Print
For currpos = currpos To currpos_end
currpos2 = currpos
i = 1
Do
If currpos2 > x Then
array_index(i) = currpos2 Mod x
currpos2 = CULngInt(currpos2 / x)
ElseIf currpos2 = x Then
array_index(i) = 0
i += 1
array_index(i) = 1
Exit Do
Else
array_index(i) = currpos2
Exit Do
EndIf
i += 1
Loop
'Print i; " . "; currpos; " "; currpos2
'''first = i Until 1 = last
For j As Integer = i To 1 Step -1
'Print digit_array(array_index(j));
Next
'Print
'Sleep
Next
Print "."
Sleep
答案 0 :(得分:1)
thx How to convert an integer in any base to a string?
def calculation():
while 1:
global s, n
r = n % base
if r == 0: return
s = digits[r] + s
n = n // base
if n == 0: return
# . . .
digits = "X0123456789"
digits = "X23456789AJKQ" #first digit not use, remain for calculation
currpos = 0
currpos = 30941 #22222 base13 13^4+13^3+13^2+13+1
#currpos_end = 371292 #QQQQQ base13 13^5-1
currpos_end = pow((26+10+1),5)
currpos_end = 371292
#currpos_end = 1024
base = len(digits)
print (currpos)
print (base)
print ()
for currpos in range(currpos, currpos_end):
n = currpos
s = ""
calculation()
if s == "":
continue
print (s, " . ", currpos, " . ", n)
#do something here with s
答案 1 :(得分:0)
为了好玩,我试图弄清楚你在代码中想要做什么,但放弃了。
无论如何,这里有一些代码清理了一下:
digit_array=[
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j"
]
array_index = [0] * 51
#currpos_end = pow((26+10+1),5)
currpos_end = 1024
x = 10 # ubound digit_array + 1, ("0","1") binary then x = 2
for currpos in range(currpos_end):
i = 1
while True :
if currpos > x:
array_index[i] = currpos % x
currpos = int(currpos / x)
elif currpos == x:
array_index[i] = 0
i += 1
array_index[i] = 1
break
else:
array_index[i] = currpos
break
i += 1
result = "".join([digit_array[i] for i in array_index])
print(result)
这将生成结果:
adcabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa