2017-09-01 1 views
0

Ich bin ziemlich neu in Python also bitte bitte mit mir.Entspricht dieser Python-Code Java-Code?

Dies ist der Java-Code:

public static int countDeafRats(final String town) { 
    String t = town.replaceAll(" ",""); 
    int count = 0; 
    for (int i = 0 ; i < t.length() ; i+=2) 
     if (t.charAt(i) == 'O') count++; 
    return count; 
} 

Dies ist mein Versuch, es zu Python zu übersetzen:

def count_deaf_rats(town): 
    count = 0 
    increment = 0 
    newTown = town.replace(" ", "") 
    while increment <= len(newTown): 
     if newTown[increment]=='O': 
      count +=1 
      increment +=2 
    return count 

ich nicht für Schleife in Python verwendet habe, da ich nicht wie zu tun um 2 erhöhen, wie der Titel sagt, wäre dies eine akzeptable Übersetzung?

bearbeiten, Abtastwerteingang: ~O~O~O~OP~O~OO~

+2

Einrücken ist falsch. Alles unter 'def 'sollte nach rechts eingerückt sein. – Alfabravo

+1

Können Sie eine Beispieleingabe und Ihre erwartete Ausgabe zeigen? Statt einer direkten Übersetzung gibt es wahrscheinlich eine pythonische Art, dies natürlich zu tun. – CoryKramer

+2

Überprüfen Sie https://docs.python.org/2/library/functions.html#range für die Erhöhung um 2 ... 'für i im Bereich (0, newTown, 2):' – bphi

Antwort

4

Es scheint, dass Sie die Anzahl der Nullen in der Zeichenfolge zu finden versuchen, die von 2. Sie erhöht bei Indizes auftreten können regex und Listenkomprehensionen in Python verwenden:

import re 

new_town = re.sub("\s+", '', town) 

count = sum(i == "0" for i in new_town[::2]) 
+1

Oder einfach 'sum (c ==" 0 "für c in new_town [:: 2])' –

+0

@ juanpa.arrivillaga Vielen Dank für Ihren Vorschlag. Bitte sehen Sie meine letzte Änderung. – Ajax1234

1

okay, ich werde empfehlen, dass Sie die von @ Ajax1234 vorgesehen Antwort folgen müssen aber da Sie erwähnen, dass Sie ziemlich neu sind (wahrscheinlich nicht vertraut viel über regex) in Python so würde ich für die aktuelle Instanz schlägt vor, Sie halten sollen zu Ihrem Code whic Sie versuchen, zu konvertieren. Es ist ziemlich richtig, nur Sie müssen einige Änderungen an Ihrem Code vornehmen (obwohl sehr klein in Bezug auf Einzug). Ihr geänderter Code würde etwa so aussehen:

def count_deaf_rats(town): 
    count = 0 
    increment = 0 
    newTown = town.replace(" ", "") 
    while increment <= len(newTown): 
     if newTown[increment]=='O': 
      count +=1 
     increment +=2 
return count 

#print count_deaf_rats("~O~O~O~OP~O~OO~") 

Dies ergibt das gleiche Ergebnis wie Ihr entsprechender Java-Code. Auch da while Schleifen nicht viel beachteten handy (aber in einigen Fällen viel nützlich auch) in Python deshalb werde ich darauf bestehen, for Schleife zu verwenden, wie:

#Same as above 
for increment in range(0,len(newTown),2): 
    if newTown[increment] == 'O': 
     count +=1 
return count 

Lesen Sie mehr über Range-Funktion here

1

I don‘ t wissen zu viel Java, aber ich glaube, dass dies eine direktere Übersetzung des Codes in python ist:

def countDeafRats(town): 
    count = 0 
    new_town = town.replace(' ','') 
#format for range: start, end (exclusive), increment 
    for i in range(0, len(new_town), 2): 
     if new_town[i] == '0': 
      count += 1 
    return count 

ich mit @ Ajax1234 ‚s Antwort einverstanden, aber ich dachte, Sie könnten eine mögen Ein Beispiel, das näher an Ihrem Code ist, mit der Verwendung einer For-Schleife, die die Verwendung eines Inkrements von 2 demonstriert. Hoffe, das hilft!