2013-05-02 66 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