2016-03-25 18 views
1

'da bulunursa, dosyadan hat yazdırın Kullanıcının bir isim veya telefon numarası girmesine izin verecek, bir dosyada bulunup bulunmadığını ve yazdırılmış olup olmadığını kontrol etmeye çalışıyorum. Bu elemanın bulunduğu tüm çizgiyi. Bugüne kadar var:Hattın bir kısmı Python

def searchPlayer(): 
    with open("players.txt") as f: 
     data = f.readlines() 
     print "Enter 0 to go back" 
     nameSearch = str(raw_input("Enter player surname, forname, email, or phone number: ")) 

     if any(nameSearch in s for s in data): 
      #Finding the element in the list works 
      #Can't think of a way to print the entire line with the player's information 
     else: 
      print nameSearch + " was not found in the database" 

dosya biçimlendirilir şöyle:

Joe;Bloggs;[email protected];0719451625 
Sarah;Brown;[email protected];0749154184 

Yani namesearch == Joe eğer, çıkış Herhangi bir yardım mutluluk duyacağız Joe;Bloggs;[email protected];0719451625

olmalıdır, teşekkürler

+1

Sorun şu ki, herhangi bir (...) 'hangi satırın eşleştiğini söylemiyor. Bir döngüye açın ve bunu daha kolay bulacaksınız. – alexis

cevap

2

Neden bir döngü kullanmıyorsunuz?

for s in data: 
    if nameSearch in s: 
     print s 
     break 

any

docs itibaren, zaten döngü olduğunu:

def any(iterable): 
    for element in iterable: 
     if element: 
      return True 
    return False 
+0

Bu döngüler, ancak kısa devreleri (buna eşdeğer hale getirmek için döngüye bir 'break' eklemeniz gerekir), ve CPython'da (referans yorumlayıcı) C içinde uygulanır. ilmekledi. Tabii ki, ihtiyacınız olanı yapmazsa yardımcı olmaz. :-) – ShadowRanger

+0

Haklısınız, düzeltildim - Bir şekilde getiri lol'u kaçırdım, sanırım 'baskıları yazdır' diyebilirsiniz – Bahrom

1

çok karmaşık görünüyor, Bir yorumda @alexis gibi sadece

with open("players.txt") as f: 
    for line in f: 
    if nameSearch in line: 
     print line 
0

yap, any() kullanmamalısınız hangi çizginin eşleştiğini bilmek istiyorsan. Eğer sadece ilk maçı yazdırmak break önce karma işareti çıkar ve else: için if not found: değiştirmek istiyorsanız

found = False 
for s in data: 
    if nameSearch in s: 
     print s 
     found = True 
     #break # Optional. Put this in if you want to print only the first match. 

if not found: 
    print "{} was not found in the database".format(nameSearch) 

: Bu durumda, bunun yerine bir döngü kullanmalısınız.

1

any'u diğerlerinin de belirttiği gibi kullanamazsınız, ancak daha küçük kodları saklamak istiyorsanız next'u kullanabilirsiniz. Onun yerine:

entry = next((s for s in data if nameSearch in s), None) 
if entry is not None: 
    print entry, 
else: 
    print nameSearch, "was not found in the database" 

Not:

if any(nameSearch in s for s in data): 

Eğer next with a default value kullanacağınız size, biçimlendirme karıştırıyorsun sona aksi takdirde Burada ayrıştırmak csv.reader veya benzeri kullanmak isteyebilirsiniz; Bir kullanıcı ; girerse, ; biçimlendirilmiş olsa da, alan verilerini değil, ilk kaydı körü körüne döndürürsünüz. Benzer şekilde, Jon için yapılan bir arama, Jon veya Jonathan adlı ilk kişiyi veya Jon ile başlayan herhangi bir başka adı bulur.

İlgili konular