2016-04-13 6 views
0

Ich bin ein Programm, in dem Text komprimiert, die normale Buchstaben und Interpunktion usw. enthält. Allerdings habe ich über einen gemischten Operand Typ Fehler von irgendeiner Art und ich weiß nicht, wie das zu beheben . Ich habe versucht, andere Beiträge über das Thema zu lesen, aber ich kann nicht verstehen, wie es funktioniert und wie ich dies auf meinen Code anwenden kann.Kann nicht gemischt Operand in Python

print("The compression program has started") 

    myDict={} 
    revDict={} 
    sentList=[] 
    posList=[] 
    num = 0 
    sentence = open("pyCompress.txt","r").read().split() 


for word in sentence: 
     if word not in myDict: 
     myDict[word] = num 
     num += 1 

print(sentence) 
print(myDict) 

for k, v in myDict.items(): 
     revDict[v] = k 

file = open("Positions.txt","w") 
for word in sentence: 
      file.write((myDict[word]) + " ") 
      file.close() 

Es gibt mehr Code jenseits dieser Zeilen ist

Der Fehler ich erhalte, ist: Typeerror: nicht unterstützte Operandtyp (e) für +: 'int' und 'str'

+1

Könnten Sie die Fehlermeldung hinterlassen bitte? – vmonteco

+0

TypeError: nicht unterstützte Operandentypen für +: 'int' und 'str' –

+3

'myDict [word] +" "' Der Wert des dict ist ein 'int', also müssen Sie es in ein' str' umwandeln vor dem Hinzufügen: 'str (myDict [word]) +" "' –

Antwort

0

die myDict[word] gieße a str so können Sie die Verkettung durchführen, sowie die file.close außerhalb der Schleife verschieben, wie von anderen erwähnt. Somit ändert nur die letzte Schleife wie diese sollten die Fehler beheben, Sie bekommen:

for word in sentence: 
    file.write((str(myDict[word]) + " ")) 
file.close() 
0

Python erlaubt keine ganzen Zahlen in Strings und fügte hinzu:

>>> 1 + "a" 
Traceback (most recent call last): 
    File "<pyshell#7>", line 1, in <module> 
    1 + "a" 
TypeError: unsupported operand type(s) for +: 'int' and 'str' 

Um die Nummer in der Zeichenfolge setzen Sie können entweder explizit konvertieren:

>>> str(1) + "a" 
'1a' 

oder das Format in entweder mit der % Notation oder {} Notation:

>>> "the number %d is prime"%874193 
'the number 874193 is prime' 
>>> "please give me {n} apples".format(n=2) 
'please give me 2 apples' 

Sie auch print nutzen, um die Konvertierung für Sie zu handhaben:

print(myDict[word], file = file, end=" ") 

Weiter Sie sicher, dass Sie in der Nähe, eine Datei vornehmen müssen, nachdem alle die Daten zu schreiben, die sie geschrieben werden muss in Ihrem Fall, dass nach der for-Schleife würde:

for word in sentence: 
    print(myDict[word], file = file, end=" ") 
file.close() #un-indent 

Obwohl Sie eineverwenden möchtenAnweisung, um die Datei, um sicherzustellen, richtig gehandhabt:

with open("Positions.txt","w") as file: 
    for word in sentence: 
     print(myDict[word], file = file, end=" ") 
assert file.closed #the file is closed at the end of with block 
0

dies versuchen, meine Kommentare zu den Änderungen lesen I

print("The compression program has started") 

myDict={} 
revDict={} 
sentList=[] 
posList=[] 
num = 0 
sentence = open("pyCompress.txt","r").read().split() 

for word in sentence: 
    if word not in myDict: 
     # needs to convert to str 
     # also indentation problem here 
     myDict[word] = str(num) 
     num += 1 

print(sentence) 
print(myDict) 

for k, v in myDict.items(): 
    revDict[v] = k 

file = open("Positions.txt","w") 
for word in sentence: 
    file.write((myDict[word]) + " ") 
# indentation problem here 
file.close() 

Bei gemacht haben Sie beide Schlüssel und Werte in die Datei schreiben möchten , versuchen Sie dies,

file.write(word + ":" + myDict[word] + " ")

Verwandte Themen