2014-05-19 40 views
0

我一直有這個代碼有很多困難,我只是找不到任何解決方案,我會在下面發佈我的代碼。如何清除數字之間的字母(Python)

from tkinter import * 
a = [] 

class test(Frame): 
    def __init__(self, parent): 
     Frame.__init__(self, parent) 
     self.parent = parent 
     self.parent.title('testing') 
     self.pack(fill=BOTH, expand=1) 
     self.d = DoubleVar() 
     self.d.set('None') 

     def grab(): 
      b = ent.get() 
      a.append(b) 
      c = [s.strip('qwertyuiopasdfghjklzxcvbnm') for s in a] 
      self.d.set(c[-1]) 
      if c[-1] == '': 
       self.d.set('None') 
     ent = Entry(self) 
     ent.grid(row=0, column=0) 
     but = Button(self, text='Get', command=grab) 
     but.grid(row=1, column=0) 
     Label(self, textvariable=self.d).grid(row=2, column=0) 

root = Tk() 
app = test(root) 
root.mainloop 

我想我的目標是能夠忽略或刪除放置在輸入框裏面的字母,你可以看到,我用剝離法,但它不工作我希望它的方式。如果任何人都可以提供一些建議或代碼,或者將我與我忽略的問題聯繫起來,那將是驚人的,我會很高興。

編輯:這已經清零

回答

0

之間的λ的一點點應該做的伎倆

a = "123a3456b" 
    filter(lambda '0' <= x <= '9', a) 
    print a 
    "1233456" 
+0

編輯者@Scorpion_God – lealhugui

0

乾淨的方式做到這一點之前和之後的信件,但沒有什麼是簡單的:

filter(lambda s: not str.isalpha(s), data) 
+0

然後它被移除sugested。 – acushner

+0

固定。下一次,隨時提出修改解決方案的建議,因爲它對所有人都有幫助。 – acushner

0

因爲您首先將字符串放入列表中,所以您會在數字內獲得字母。

strip()刪除開頭和結尾字符,所以如果你有一個字符串:aaa000bbb111ccc,從它剝離字母只會刪除最外面的字母。但是,如果分割字符串,然後剝離剝離字符串的每個元素的字母,則會有效地刪除所有字母。然後,您可以將join()列表的其餘部分放在一起,以便返回到您的字符串。考慮下面這個例子:

>>> import string # string.ascii_letters returns a string of all letters (upper and lower), just easier than typing them 
>>> def check(x): 
    return ''.join([char.strip(string.ascii_letters) for char in x]) 

>>> var = 'aaa000bbb111ccc' 
>>> var_as_list = [var] 
>>> check(var) 
'000111' 
>>> check(var_as_list) 
'000bbb111' 

所以,c應該是:

c = ''.join([s.strip('qwertyuiopasdfghjklzxcvbnm') for s in b.get()]) 

你也應該考慮一些進一步的驗證,如果你想現場只包含float秒。下面是一個方法跟蹤到StringVar()實例的任何變化和限制爲僅是數字和週期變化到它:

from tkinter import * 
import string 

def check(*args): 
    # make a 'whitelist' of allowable characters 
    whitelist = string.digits + '.' 

    # set var to its current value - any characters not in whitelist 
    var.set(''.join([i for i in var.get() if i in whitelist])) 

root = Tk() 

var = StringVar() 
var.set('0.0') 

Entry(root, textvariable=var).grid(row=0, column=0) 
Label(root, textvariable=var).grid(row=1, column=0) 

var.trace('w', check) # if var changes, call check() 

mainloop() 
相關問題