2016-07-30 14 views
2

Ich habe Code in HackerRank geschrieben, um zu zählen, wie viele Täler, die ein Wanderer (Gary) in einer Wanderung durchging. Im Moment sieht es ungefähr so ​​aus.Drucken hat "Keine Ausgabe" in STDOUT

#Defining variables for later use and a list of Gary's steps 
steps = ["U", "D", "D", "D", "D", "D", "U", "U"] 
sea_level = 0 
valleys = 0 

#For loop to calculate how many valleys Gary hiked through 
for step in steps: 
    step_ud = step 
    if step_ud == "U": 
     sea_level += 1 
    elif sea_level == 0: 
     valleys += 1 
    elif step_ud == "D": 
     sea_level -= 1 
    elif sea_level == 0: 
     valleys += 1 
     print(valleys) 

Wenn ich den Code ausführen, erhalte ich jedoch keine Ausgabe. Meine erwartete Leistung war 1, da ich wusste, dass Gary nur durch ein Tal ging. Der Begriff Tal wurde definiert als: "Ein Tal ist eine nichtleere Abfolge von aufeinanderfolgenden Schritten unterhalb des Meeresspiegels, beginnend mit einem Abstieg vom Meeresspiegel und endend mit einem Anstieg auf Meereshöhe."

Die Frage wurde geschrieben als: "Angesichts Gary Reihenfolge der auf und ab Schritte während seiner letzten Wanderung, finden und drucken Sie die Anzahl der Täler, durch die er ging."

Ich habe einen Blick auf diese drei Beiträge genommen:

How to flush output of Python print?

python `print` does not work in loop

Ich habe auch einige andere Methoden ausprobiert, aber sie haben nicht geholfen. Das sind Dinge, die ich ausprobiert habe.

Ich importierte das sys-Modul und verwendete die sys.stdout.flush() - Funktion, um das stdout zu leeren.

Ich habe auch versucht, meine eigene Funktion der Spülung der Stdout, aber das hat auch nicht funktioniert.

def my_print(text): 
sys.stdout.write(str(text)) 
sys.stdout.flush() 

Dann habe ich die Funktion nach dem Drucken zu spülen.

import sys 
... 
#Loop with lines to determine whether it's a valley. 
... 
print(valleys) 
my_print(text) 

Derzeit bin ich ziemlich verloren zu wissen, was ich zu beheben habe. Danke für die Hilfe.

+1

Ihre 'if' Tests sind alle exklusiv, nur eine der vier Verzweigungen wird für jeden 'Schritt' ausgeführt, und da alle Schritte 'U' oder' D' sind, ist die letzte Verzweigung 'elif sea_level == 0: 'kann niemals laufen, weil die' U' oder 'D' sich verzweigen bevor es definitiv passt. Da die print-Anweisung in diesem 'elif sea_level == 0:' Zweig liegt, wird sie auch nicht ausgeführt. Zurück zum Zeichenbrett ... – TessellatingHeckler

+0

Überprüfen Sie meine aktualisierte Antwort, Beschreibung über mein Programm hinzugefügt. – bhansa

+0

Ich verstehe jetzt @TesselingHeckler. Danke für die Erklärung. –

Antwort

2

Lets hier einige Debug ausprobieren:
Ich weiß, ihr eine schlechte Idee, wenn Sie auf große Lösungen arbeiten, jedenfalls, wenn Sie
diesen Code ausführen werden Sie sehen, dass Sie nie bekommen die Bedingung elif step_ud="D", weil es Überprüfen Sie elif sea_level==0 und setzen Sie die for-Schleife fort.

steps = ["U", "D", "D", "D", "D", "D", "U", "U"] 
sea_level = 0 
valleys = 0 

#For loop to calculate how many valleys Gary hiked through 
for step in steps: 
    step_ud = step 
    if step_ud == "U": 
     print "U" 
     sea_level += 1 
    elif sea_level == 0: 
     print "0 sea" 
     valleys += 1 
    elif step_ud == "D": 
     print "D" 
     sea_level -= 1 
    elif sea_level == 0: 
     print "0 sea 2" 
     valleys += 1 
    print sea_level 

Hier ist meine Lösung, die ich während des Wettbewerbs vorgelegt:

n = int(raw_input()) 
stra = raw_input() 
lev = 0 
arr = [] 
valleys = 0 
for i in stra: 
    if i=='U': 
     lev +=1 
     arr.append(lev) 
    elif i=='D': 
     lev -=1 
     arr.append(lev) 
#print arr 
for i in range(len(arr)): 
    if arr[i]==0 and arr[i-1]<0: 
     valleys +=1 
print valleys 


Meine Idee hinter diesem Programm:


Ausgabe

C:\Users\bhansa\Desktop\Stack>python valley.py 
8 
DDUUDDUDUUUD 
[-1, -2, -1, 0, -1, -2, -1, -2, -1, 0, 1, 0] 
2 

Siehe obige Liste, wenn es 0 gibt, bedeutet das, dass gary wieder auf der See-Ebene ist
Überprüfen Sie, ob der Wert vor dem Element 0 negativ ist, dann ist es sicher
kam aus einem Tal.

Ich hoffe, es hat geholfen.