2017-01-27 1 views
-2

erwarte ich, dass die Ausgabe alsIch verstehe diese unerwartete Ausgabe nicht, kann jemand erklären?

[1,4,9,10,#] 

aber ich bin

bekommen
[1,4,9,10] 

Kann jemand erklären, ist der Grund, warum das passiert?

str = "adij" 
mainstr = [] 
for i in range(0, len(str)): 
    if 97 <= ord(str[i]) <= 107: 
     mainstr.append(ord(str[i]) - 96) 
    if ord(str[i]) > 107: 
     mainstr.append(ord(str[i]) - 96) 
     mainstr.append('#') 
print mainstr 
+2

Rufen Sie Ihre Variable 'str' nicht _ever_ auf. 'str' ist ein String-Konstruktor. Sie haben vielleicht schon Ihren Python-Interpreter durcheinander gebracht. Und anstatt kryptisch '97 <= ord (str [i]) <= 107 ', warum schreibe nicht' 'a' <= str [i] <= 'k''? Sie würden sofort sehen, was mit Ihren Erwartungen nicht stimmt. – DyZ

+0

'ord ('j')' = 106. So ist es weniger als 107. –

+0

In Python benötigen Sie keinen Schleifenzähler beim Iterieren über Zeichen in einer Zeichenfolge. Tun Sie einfach 'für den Buchstaben in str: mastertr.append (ord (Buchstabe))' –

Antwort

2

Es ist, weil ord(str[i]) nie größer als 107:

>>> ord("j") > 107 
False 
>>> ord("j") 
106 

daher mainstr.append("#") noch nie erreicht.


Andere Dinge, die Sie beheben sollten:

  • Sie sollten nie rufen Sie Ihre Variable str, str bedeutet schon etwas (es ist das string class)
  • In Python können Sie Strings direkt vergleichen. Verwenden Sie "a" <= str[i] <= "k".
  • Sie können nur die Zeichen in einem String iterieren ohne Gegen:

    for character in theString: 
        if "a" <= character <= "k": 
         # ... 
    
1

Charakter 107 'k'. Es gibt keine Zeichen in Ihrer Zeichenfolge, die 'k' lexikografisch folgen, so dass die if-Anweisung, die mainstr.append('#') enthält, nie ausgelöst wird. Der Code, der '#' zu Ihrer Liste hinzufügen würde, wird nie ausgeführt.

Verwandte Themen