मेरे पास एक कोड है जो लगता है कि एक मामूली समस्या है जो फ़ाइल को पढ़ता है ... लेकिन मुद्दा यह है कि यह शब्दों/अक्षरों की पहचान नहीं कर सकता है, मेरा मतलब है extract('test.txt',('A','E','I','O','U')) test.txt एक txt फ़ाइल है और ('A','E','I','O','U') वे शब्द हैं जिन्हें मैं खोजना चाहता हूं।

मेरा कोड:

def extract(file,find=()):
  with open(str(file),'r') as file:
    find = list(find)
    read_file = file.readlines()
    
    num1 = 0
    num = num1-1
    for vals in find:
      num1 += 1
    pass  
  
    for finds in read_file:
      linef = str(finds)
      main_obj = find[num]
        
      if main_obj in linef:
        print("Yay")
        
      elif linef != main_obj:
        print("NO")
        
      else:
          print("???")
    pass  


extract('test.txt',('A','E','I','O','U'))

मेरा आउटपुट क्या है:

NO
NO
NO
NO
Yay

यह अपेक्षित आउटपुट है:

Yay
Yay
Yay
Yay
Yay

अंदर test.txt:

A
E
I
O
U
0
Fahim Ferdous 22 पद 2020, 20:35

3 जवाब

सबसे बढ़िया उत्तर

मैं इसे यहीं छोड़ता हूँ। यदि अंतिम परिणाम find के अंदर प्रत्येक चर की तुलना file की प्रत्येक पंक्ति से करना है तो यह कार्य करना चाहिए:

def extract(file, find=()):
    with open(file) as F:
        contents = F.readlines()

    for line in contents:
        if any([i in line for i in find]):
            print("Yay")
        else:
            print("NO")

extract("test.txt", ('A','E','I','O','U'))
1
Hampus Larsson 22 पद 2020, 21:15

आपको बस अपने तर्क को अपडेट करने और इस कोड को हटाने की जरूरत है। क्योंकि यह हर वेतन वृद्धि पर हमेशा -1 सूचकांक लौटाएगा।

num1 = 0
num = num1-1
for vals in find:
  num1 += 1
pass  

बस एक वेरिएबल का उपयोग करें और उसके अनुसार इसे बढ़ाएँ।

def extract(file, find=()):
    num = 0
    with open(str(file), 'r') as file:
        find = list(find)
        print(find)
        read_file = file.read().splitlines()
        print(read_file)

        for finds in read_file:
            linef = str(finds)
            main_obj = find[num]
            num += 1

            if main_obj in linef:
                print("Yay")

            elif linef != main_obj:
                print("NO")

            else:
                print("???")
        pass
0
Sohaib 22 पद 2020, 20:54

कोड में:

for finds in read_file:
  linef = str(finds)
  main_obj = find[num]
    
  if main_obj in linef:
    print("Yay")
    
  elif linef != main_obj:
    print("NO")

आप कभी भी num में वृद्धि नहीं करते हैं और इसलिए अनिवार्य रूप से हमेशा find[-1] की तुलना main_obj से करते हैं। मुझे लगता है कि अगर कोई मैच है या आपकी आवश्यकता जो भी हो तो आपको num बढ़ाना होगा।

if main_obj in linef:
  num += 1
  print("Yay")

किसी भी तरह से, यह आपके लिए आवश्यक कार्यों को करने का सबसे सीधा-साधा सही तरीका होगा:

for temp in find:
    not_found = True
    for finds in read_files:
        if temp in finds:
            not_found = False
            print("Yay")
            break
        elif temp != finds:
            not_found = True # elif is not needed TBH but just adding for clarity
    if not_found:
        print("NO")
0
Jarvis 22 पद 2020, 20:58