2016-04-17 12 views
0

Ich schreibe ein Programm, wo ein Startsatz angezeigt wird und der Benutzer ein Wort eingeben muss, das im Satz ist, so dass das Programm kann Sagen Sie dem Benutzer die Position, in der sich das Wort im Satz befindet. Ich möchte, dass das Programm jeden Fall akzeptiert, aber im Moment akzeptiert es nur UPPER. Kann mir bitte jemand helfen, wie man die Groß-/Kleinschreibung unempfindlich macht und dem Benutzer immer noch die Positionen der Wörter sagt, wenn sie sie eingeben? Thanks :)Wie bekomme ich mein Programm um jeden Fall zu akzeptieren, wenn ich ein Wort hinein gebe

Hier ist mein Code so weit:

import time 

sentence = ("ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY") 

sentence2 = sentence.split() 

print(sentence) 

time.sleep(1) 

word = input("Enter Word: ") 

print(word) 

sentence == sentence.lower() 

word == word.lower() 

if word in sentence: 

    print("Word is valid") 

elif word not in sentence: 

    print("Word is invalid") 


for (num, x) in enumerate(sentence2): 

    if word == x: 

     print ("Your word is in position ",num+1,"!") 
+1

Was versuchen Sie mit den '==' Vergleichen zu erreichen, für die ihr Wert bis ins Leere reicht? – timgeb

+0

Wenn ich nur 1 = verwende, gibt mir das Programm nicht die Position des eingegebenen Wortes, deshalb verwende ich == –

+0

Aber du siehst, wie 'x == True' nichts tut. '=' ist der Operator * assignment *, während '==' der Operator * equality * ist. – Signal

Antwort

0

Convert word mit word = word.lower() in Großbuchstaben und die folgenden Zeilen entfernen:

sentence == sentence.lower() 
word == word.lower() 
+0

Aber wenn ich nur 1 =, das Programm gibt mir nicht die Position des eingegebenen Wortes –

+0

@ J.W, was? 'N ==Niedriger()' prüft, ob 'N' gleich'N' ist, konvertiert in Kleinbuchstaben. – ForceBru

+0

Wenn ich es tue, Satz = Satz.lower() und word = word.lower() das Programm gibt mir nicht die Position des am Ende eingegebenen Wortes –

1

Die == Operator prüft, ob Gleichwertigkeit, es doesn‘ t nichts zuweisen. Diese Codezeile: sentence == sentence.lower() sollte sentence = sentence.lower() lauten und die Zeile darunter sollte lauten.

Darüber hinaus, da Sie sentence in sentence2 ganz am Anfang des Programms aufgeteilt, sentence.lower() nicht sentence2 ändern, was bedeutet, es wird nie die Position des Wortes, weil sentence2 all Groß- und word ist klein geschrieben. Um dies zu beheben, loszuwerden sentence2 und ersetzen Sie die letzte für Aussage mit so etwas wie dieses

for (num, x) in enumerate(sentence.split()): 
+0

Wo soll ich es in meinen Code einfügen/was soll ich in meinem Code ersetzen? –

+0

Ich sagte es explizit in meiner Antwort, Satz == Satz.Loer() 'und' Wort == Wort.Loer() 'sind Ihre beleidigenden Zeilen – Natecat

+0

Aber wenn ich nur 1 =, das Programm gibt mir nicht die Position des eingegebenen Wortes am Ende –

0

Dies ist die einfachste Art und Weise kann ich mir vorstellen

>>> import collections 
>>> position_index = collections.defaultdict(list) 
>>> sentence = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY" 
>>> for index, word in enumerate(sentence.split()): 
...  position_index[word].append(index) 
... 
>>> position_index["can".upper()] 
[5, 12] 
>>> position_index["what".upper()] 
[2, 10] 

Die for-Schleife baut ein Wörterbuch-like Datenstruktur, die so aussieht

{'DO': [6, 13], 'WHAT': [2, 10], 'FOR': [7, 14], 'COUNTRY': [4, 16], 'ASK': [0, 9], 'CAN': [5, 12], 'NOT': [1], 'YOU': [8, 11], 'YOUR': [3, 15]} 

Nun, da Sie ein Wörterbuch haben, müssen Sie mit Wörtern umgehen, die nicht vorhanden sind. Da dies ein Standarddict verwendet, haben Sie den zusätzlichen Vorteil, dass direkte Suchvorgänge nach fehlenden Indizes eine leere Liste zurückgeben.

>>> print(position_index["they".upper()]) 
[] 

So können Sie einfach

>>> word = "what" 
>>> positions = position_index[word.upper()] 
>>> if positions: 
...  print("The word '%s' appears at position(s): %s" %(word, ",".join(map(str, positions)),)) 
... else: 
...  print("The word '%s' does not appear" %(word,)) 
... 
The word 'what' appears at position(s): 2, 10 
+0

Danke für deine Hilfe, es funktioniert jetzt. :) –

0
def findPos(sentence, word): 
sentence = sentence.lower().split(' ') 
word = word.lower() 
index = 0 
for i in sentence: 
    if word == i: 
     print '%s is a valid word and is found at position %s'%(word, index) 
     return 
    index += 1 
    print i 
print '%s is not a valid word'%word 

sentence = 'Ask not what you can do... I forgot!!' 
word = raw_input('What is your word?: ') 
findPos(sentence, word) 

Derzeit wird dies nicht für die Dinge funktionieren, die in Interpunktion enden (vergessen, tun). Dies liegt daran, dass wir die beiden direkt bewerten. Die einzige Möglichkeit, die ich sehe, ist, den Operator in zu tun. Dies wird natürlich zu noch größeren Problemen führen (Input: a Output: Fragen, was, kann. Das ist, weil "a" technisch in allen dreien ist!)! Hoffe das hilft! Dies gibt auch nur den ersten Index des Wortes zurück. Dies könnte durch eine Liste von Positionen geändert werden. Am Ende der Schleife wenn len(list) > 0 wir return, unter Umgehung der zweiten Druck. Es liegt an dir!

+0

Danke für deine Hilfe, es funktioniert jetzt. :) –

Verwandte Themen