2013-05-02 67 views
2

我想創建一個轉換程序,自動將轉換後的文本複製到Windows剪貼板。我試圖做到這一點,以便如果用戶輸入一個小數點後兩位的數字,它會將轉換後的結果複製到三個位置到剪貼板。如果用戶輸入一個小數點後3位的數字,它會將轉換後的結果複製到剪貼板中取出至小數點後4位。當我運行代碼時,我得到一個ValueError,但我不知道爲什麼。下面是我得到創建if語句與浮動

line 88, in con 
    if float_number >= ("%.3f" % float_number): 
ValueError: incomplete format 

錯誤繼承人的代碼的一部分那給我的麻煩(我把在註釋中解釋的事情,可能看起來像他們對你的思念你們/加侖)

def con(): 
    While True: 
     print("Return = Main Menu, Surface = RA Conversion") 
     print(MM_break) #This is defined globally elsewhere 
     number = (input()) 
     if number in('Return', 'return'): 
      break 
     elif number in('Surface', 'surface'): 
      surf() #I have a def surf() elsewhere in the program 
     elif number in('help', 'Help'): 
      help() #I have a def for help() elsewhere 
     elif number in('end', 'exit', 'quit') 
      break 
     else: 
      try: 
       float(number) 
      except ValueError: 
       print(sys_Error) #I have a global variable for sys_Error elsewhere 
       break 
      else: 
       float_number = float(number) 
      Convert = float_number/Inches 
      Results_3 = ("%.3f" % Convert)#converts 3 decimals 
      Results_4 = ("%.4f" % Convert)#converts to 4 decimals 
      print(line_break) 
       print(" ") 
      print('\t', Results_3) 
      print('\t', Results_4) 
      print(line_break) 
      print(" ") 
      if float_number >= ("%.3f%" % float_number): 
       r = Tk() 
       r.withdraw() 
       r.clipboard_clear() 
       r.clipboard_append(Results_4)#appends Results_4 to clipboard 
      else: 
       r = Tk() 
       r.withdraw() 
       r.clipboard_clear() 
       r.clipboard_append(Results_3) 
+0

請不要給我們錯誤的*全*回溯,而不是問我們猜測其中的錯誤發生。 – 2013-05-02 13:55:44

+0

您不需要調用兩次「float(number)」。只需將'float_number = float(number)'移到'try' /'內,除了..:'並將其他':'套件全部移除。 – 2013-05-02 13:56:32

+0

我可以看到你的代碼將拋出一個'TypeError'而不是'ValueError'。那是你看到的嗎? – 2013-05-02 13:58:51

回答

3

你的錯誤表示您必須在字符串模板的錯誤,你缺少一個%

if float_number >= (".3f" % float_number): 

應該

if float_number >= ("%.3f" % float_number): 

Hovever,現在你正試圖用字符串來比較float值:

if float_number >= ("%.3f" % float_number): 

這將拋出一個TypeError

>>> 0.123 >= '0.123' 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unorderable types: float() >= str() 

不要那樣做。比較彩車花車來,用round()創建四捨五入值:

if float_number >= round(float_number, 3): 
+0

這工作擺脫了錯誤,除了現在它嚴格拷貝Results_4到剪貼板,不管輸入是什麼,我試圖讓它如此,如果用戶輸入讓我們說.05它將返回.002並被複制到剪貼板,但如果用戶輸入.005,它會返回.0002,並將其複製到剪貼板。 – 2013-05-02 14:20:34

+1

你需要更仔細地考慮你的情況。也許你可以比較'round(float_number,3)> = 0.01'。 – 2013-05-02 14:31:44

+0

@ Martijn,有點解決我的問題,但如果用戶輸入3.01然後它會打印出.119和複製,但如果用戶輸入3.001我希望它打印出.1181和複製到剪貼板 – 2013-05-02 15:03:55