2014-04-12 74 views
-6

這使纏着我與我將在年底陳述的錯誤:這個編程有什麼問題?

import math 
# Target: 
# Enter an input and it will convert into GB, MB and KB with the leftover bytes in it 
def start(): 
print '' 
print '' 
# 10 = 1 billion 
byte = input("Bytes: ") 
tw = int(math.log10(byte))+1 
tw = tw - 7 
gb = byte // 10**9 
byte = str(byte) 
a = len(byte) - 6 
b = len(byte) - 3 
if b > 0: 
    if a > 0: 
     kb = int(str(byte)[a:b]) 

    else: 
     kd = int(str(byte)[0:b]) 
else: 
    kb = 0 
c = len(byte) - 6 
if c > 1: 
    mb = int(str(byte)[0:c]) 
    if int(mb) > 999: 
     if int(mb) < 10000: 
      mb = mb // 10**3 
      byte = str(byte) 
      if len(byte) <= 3: 
       mb = 0 
       kb = 0 
else: 
    mb = 0 

d = len(byte) - 6 
byte = int(byte) 
lob = int(str(byte)[d:]) 
byte = str(byte) 
if int(kb) > 1000: 
    dmb = mb // 10**3 
    mb = mb + dmb 
    kb = kb // 10**3 
print '' 
print '' 
print '' 
print('  GB: %s MB: %s KB: %s') % (gb, mb, kb) 
print('  Bytes: %s') % lob 
print '' 
print '' 
print '' 
start() 

有什麼不對呢? 它一直在說:

Traceback (most recent call last): 
File "bytes.py", line 53, in <module> 
start() 
File "bytes.py", line 39, in start 
if int(kb) > 1000: 
UnboundLocalError: local variable 'kb' referenced before assignment 

怎麼了?我 我不斷地改變第39行到不同的地方,但我不知道我是如何解決它? 使用UnboundLocalError,我無法弄清楚在賦值之前如何引用局部變量'kb'。幫幫我!

+5

你有一個代碼路徑,你只能指定'kd',而不是'kb'。大概這是一個錯字。 (使用好的變量名可以使這一點更容易發現。) – geoffspear

回答

1

除了一些醜陋的反模式,有一個明顯的錯誤/錯字:採取在

if a > 0: 
    kb = int(str(byte)[a:b]) 

else: 
    kd = int(str(byte)[0:b]) 

好好看看你現在看到你的錯誤來自哪裏?

+0

對不起,這是關閉主題不讀 – Okx