2016-03-31 6 views
2

フィボナッチでフィボナッチまたはルーカスの数列の任意の数の要素を生成するプログラムを作成しました(フィボナッチは1,1,2,3,5,8,13などです。 lucasは2,1,3,4,7,11,18など)ですが、何らかの理由で特定の数字(特定のしきい値を上回っていると思われます)で実行した場合は、数字に続いて大文字のLが出力されます。最初の数値これは2971215073でしたが、他のプログラムはそれ以上の数値を生成しても問題ありません。私はそれをやめさせることをどうやって止めるのですか?その全体がコード:数字の後ろに 'L'が続く数字を出力する

import time 
f = [1,1] 
l = [2,1] 
x = True 
while x == True: 
    b = raw_input('Would you like to generate fibonacci numbers (enter f) or lucas numbers (enter l)?\n') 
    if b == 'l' or b == 'L' or b == 'lucas' or b == 'Lucas': 
     z = True 
     x = False 
    elif b == 'f' or b == 'F' or b == 'fibonnaci' or b == 'Fibonnaci' or b == 'Fibonacci' or b == 'fibonacci': 
     z = False 
     x = False 
    else: 
     print 'That isn\'t an answer. Enter f or l.' 
y = True 
while y == True: 
    c = raw_input('Would you like to generate up to a limit (enter a) or a certain number of elements (enter b)?\n') 
    if c == 'A' or c == 'a': 
     w = True 
     y = False 
    elif c == 'B' or 'b': 
     w = False 
     y = False 
    else: 
     print 'That isn\'t an answer. Enter a or b.' 
a = input('Enter an upper bound.\n') 
c = 1 
if z == True and w == True: 
    start = time.clock() 
    while((l[c] + l[c-1]) <= a): 
     l += [(l[c] + l[c-1])] 
     c += 1 
    print l 
    if (time.clock() - start) >= 60: 
     print 'Program took ' + str(time.clock() - start) + ' seconds to run.' 
if z == True and w == False: 
    start = time.clock() 
    while(c-1 <= a-3): 
     l += [(l[c] + l[c-1])] 
     c += 1 
    print l 
    if (time.clock() - start) >= 60: 
     print 'Program took ' + str(time.clock() - start) + ' seconds to run.' 
if z == False and w == True: 
    start = time.clock() 
    while((f[c] + f[c-1]) <= a): 
     f += [(f[c] + f[c-1])] 
     c += 1 
    print f 
    if (time.clock() - start) >= 60: 
     print 'Program took ' + str(time.clock() - start) + ' seconds to run.' 
if z == False and w == False: 
    start = time.clock() 
    while(c-1 <= a-3): 
     f += [(f[c] + f[c-1])] 
     c += 1 
    print f 
    if (time.clock() - start) >= 60: 
     print 'Program took ' + str(time.clock() - start) + ' seoonds to run.' 
raw_input('Press enter to exit.') 

出力の例:

Would you like to generate fibonacci numbers (enter f) or lucas numbers (enter l)? 
f 
Would you like to generate up to a limit (enter a) or a certain number of elements (enter b)? 
b 
Enter an upper bound. 
100 



    [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 
2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 
    514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 
    24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903, 2971215073L, 4807526976L, 7778742049L, 
    12586269025L, 20365011074L, 32951280099L, 53316291173L, 86267571272L, 
    139583862445L, 225851433717L, 365435296162L, 591286729879L, 956722026041L, 1548008755920L, 2504730781961L, 4052739537881L, 6557470319842L, 
    10610209857723L, 17167680177565L, 27777890035288L, 44945570212853L, 
    72723460248141L, 117669030460994L, 190392490709135L, 308061521170129L, 
    498454011879264L, 806515533049393L, 1304969544928657L, 2111485077978050L, 
    3416454622906707L, 5527939700884757L, 8944394323791464L, 14472334024676221L, 
    23416728348467685L, 37889062373143906L, 61305790721611591L, 
    99194853094755497L, 160500643816367088L, 259695496911122585L, 420196140727489673L, 679891637638612258L, 1100087778366101931L, 1779979416004714189L, 2880067194370816120L, 4660046610375530309L, 
    7540113804746346429L, 12200160415121876738L, 19740274219868223167L, 
    31940434634990099905L, 51680708854858323072L, 83621143489848422977L, 
    135301852344706746049L, 218922995834555169026L, 354224848179261915075L] 
     Press enter to exit. 
+0

L 'が長い' という意味します。数字が高すぎます。 Intは32ビットの精度で符号化され、ロングは無制限です。 – loutre

+0

Python 3に切り替えることをお勧めします。この混乱はもう存在しません。 –

答えて

5

L "は、長整数" を示すのPython 2の癖です。リストを印刷するのではなく、個別に番号を印刷すると、「L」は表示されません。もう1つの選択肢は、Python 3にアップグレードすることです。

print ", ".join(str(x) for x in l) 

print l 

をあなたはまだ、角かっこをしたい場合は、その後の書式を使用することができます:

は、交換を検討

print "[{}]".format(", ".join(str(x) for x in l)) 
+0

リストに残したまま、それらを取り除く方法はありますか? – Mathime

+0

@Mathimeあなたはまだリストに数字を残すことができます。 Lはリストには存在しません。それはリストをリストとして印刷する人工物です。私はリストを印刷する別の方法で私の答えを更新します。 –

+0

これは次のようになります:TypeError:シーケンス項目0:期待される文字列、intが見つかりました – Mathime

関連する問題