Hallo zusammen
ich habe eine kleine dynamische Liste in welcher der Benutzer den Listennamen selber definieren kann.
Mittels if und else wird überprüft, ob der vom Benutzer eingegebene Name bereits existiert.
Die Rückmeldung "Name existiert" erfolgt wie gewünscht im Ausgabefenster.
Aber eben so oft wie die Schleife durchläuft.
Ich hätte aber gerne dass die Rückmeldung nur einmal kommt, aber dennoch in der Schleife drinnen ist.
Hier mein Script:
..............................................................................
Liste = [1,2,3,4,5,6]
Name = raw_input("Bitte definieren Sie einen Namen:")
for x in Liste:
Liste_a = Name + "_" + str(x)
if Name:
print Liste_a
print "it exists"
else:
print "dont exist"
print "Thank you for help"
..................................................................................
(ist verhältnismässig sinnfrei, veranschaulicht aber meine Frage und dient nur Übungszwecken).
Ich würde mir als Ergebnis wünsche:
it exists
Name_1
Name_2
Name_3
Name_4
Name_5
Name_6
Thank you for help
was ich mit oben angeführtem Script bekomm ist aber:
Name_1
it exists
Name_2
it exists
Name_3
it exists
Name_4
it exists
Name_5
it exists
Name_6
it exists
Thank you for help.
Kann mir jemand von Euch verraten, was ich da anders machen muss?
Vielen Herzlichen Dank im voraus und liebe Grüsse
Marla
print befehl in Liste nur einmal ausführen
- noisefloor
- User
- Beiträge: 4160
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
könntest du den Code bitte mal in einem Code-Block posten (bekommst du, indem du auf die Schaltfläche "Code" oberhalb des Eingabefensters klickst), damit man die Einrückung sieht und so auch, was zusammengehört und was nicht.
Ansonsten ist `if Name:` relativ sinnlos, weil das immer `True` ist, wenn der Nutzer bei `raw_input` was eingibt.
Gruß, noisefloor
könntest du den Code bitte mal in einem Code-Block posten (bekommst du, indem du auf die Schaltfläche "Code" oberhalb des Eingabefensters klickst), damit man die Einrückung sieht und so auch, was zusammengehört und was nicht.
Ansonsten ist `if Name:` relativ sinnlos, weil das immer `True` ist, wenn der Nutzer bei `raw_input` was eingibt.
Gruß, noisefloor
Hier der Code im Codeblock, ich hoff ich hab das so richtig gemacht:
[Codebox=pys60 file=Unbenannt.txt]Liste = [1,2,3,4,5,6]
Name = raw_input("Bitte definieren Sie einen Namen:")
for x in Liste:
Liste_a = Name + "_" + str(x)
if Name:
print Liste_a
print "it exists"
else:
print "dont exist"
print "Thank you for help"[/Codebox]
vielen Dank vorab
Marla
[Codebox=pys60 file=Unbenannt.txt]Liste = [1,2,3,4,5,6]
Name = raw_input("Bitte definieren Sie einen Namen:")
for x in Liste:
Liste_a = Name + "_" + str(x)
if Name:
print Liste_a
print "it exists"
else:
print "dont exist"
print "Thank you for help"[/Codebox]
vielen Dank vorab
Marla
@78gradn: Da sich Name innerhalb der for-Schleife nicht ändert, kann man die if-Abfrage auch vor die Schleife ziehen, und Du erhältst Dein gewünschtes Ergebnis:
Aber wie noisefloor schon geschrieben hat, der Code ist so sinnlos, dass er nicht mal als Veranschaulichung dient. Was möchtest Du denn wirklich erreichen?
Code: Alles auswählen
Liste = [1,2,3,4,5,6]
Name = raw_input("Bitte definieren Sie einen Namen:")
if Name:
print "it exists"
else:
print "dont exist"
for x in Liste:
print "{}_{}".format(Name, x)
print "Thank you for help"
Hallo zurück
danke für die Hinweise. Bin recht neu in der Materie. War mir deshalb nicht klar, dass dass oben geschriebene nix bringt.
Hier der eigentliche Code.
Konkret geht es um den Teil aber buffer = [10, 30, ...].
wie gesagt, ich schaff es nicht, dass sich dieses Buffer erstellt nicht ständig widerholt. Ich hätte gerne
dass sich "Buffer erstellt" nur einmal darstellt und dann darunter die Werte.
Herzlichen Dank nochmals für Eure Hilfe und schönes WE.
Marla
danke für die Hinweise. Bin recht neu in der Materie. War mir deshalb nicht klar, dass dass oben geschriebene nix bringt.
Hier der eigentliche Code.
Konkret geht es um den Teil aber buffer = [10, 30, ...].
wie gesagt, ich schaff es nicht, dass sich dieses Buffer erstellt nicht ständig widerholt. Ich hätte gerne
dass sich "Buffer erstellt" nur einmal darstellt und dann darunter die Werte.
Code: Alles auswählen
# Autor: Marla Hofbauer
# Datum: 3.11.2015
# Berechnung von Distanzen zu den Zufahrtsstrassem zum Flughafen Genf
# Buffer-Script um eine Schleife für die wiederholte Ausführung erweitern
import arcpy
arcpy.env.overwriteOutput = 1
cpy.env.workspace = "C:\\geneve.mdb"
strassen = "rue_geneve"
if arcpy.Exists(strassen):
print "Datensatz strassen vorhanden"
else:
print "Datensatz strassen nicht vorhanden"
buffer = [10,300,500,70,100]
vorsilbe = raw_input("Buffername eingeben:")
for x in buffer:
B1 = buffer + "_" + str(x)
if arcpy.Exists(B1):
unique_name = arcpy.CreateUniqueName
"damit kreiert das System selbst einen passenden namen"
B2 = unique_name + "_" + str(x)
arcpy.Buffer_analysis(strassen, B2, x, "FULL", "ROUND", "ALL")
print "buffer erstellt"
print B2
else:
arcpy.Buffer_analysis(strassen, Buffer, x, "FULL", "ROUND", "ALL")
print "buffer erstellt"
print B1
print "Buffer erstellt"
Marla
Dazu ziehst du die entsprechende Befehle unter die Schleife, so dass sie nicht mehr im Rumpf der Schleife stehen, und bei jedem Lauf ausgeführt werden, sondern im normalen Block nach der Schleife. Im besten Fall kannst du die Schleifenlogik in ihren eigene Funktion auslagern. Es empfiehlt sich immer, reine Programmlogik von der Ein- & Ausgabe wie zB print zu trennen.78gradn hat geschrieben:Bin recht neu in der Materie. (...)
wie gesagt, ich schaff es nicht, dass sich dieses Buffer erstellt nicht ständig widerholt. Ich hätte gerne
dass sich "Buffer erstellt" nur einmal darstellt und dann darunter die Werte.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
aber dann schreibt es mir beide alternativen in die Ausgabe, oder nicht?
Ich muss das ja so hinkriegen,
dass mir im Falle, dass der eingegebene Name noch frei ist das Statement zu B1 ausgegeben wird (und B2 nicht)
und falls der eingegebene Name bereits existiert muss das statement zu B2 ausgegeben werden.
Also nur einfach drunterschreiben kann ich nicht, oder?
muss ich dann auch wieder etwas mit if und else machen?
Kebab: du hast mir ja jetzt schon mehrmals geholfen. Vielen herzlichen Dank für dein Engagement!
Ich muss das ja so hinkriegen,
dass mir im Falle, dass der eingegebene Name noch frei ist das Statement zu B1 ausgegeben wird (und B2 nicht)
und falls der eingegebene Name bereits existiert muss das statement zu B2 ausgegeben werden.
Also nur einfach drunterschreiben kann ich nicht, oder?
muss ich dann auch wieder etwas mit if und else machen?
Kebab: du hast mir ja jetzt schon mehrmals geholfen. Vielen herzlichen Dank für dein Engagement!
@78gradn: wenn Du Deine Fragen genauso unkonzentriert schreibst, wie Deinen Code, ist es wirklich schwierig, Dir zu helfen. Wenn ich Dich richtig verstehe, willst Du 5 Namen erzeugen, die eine eindeutige Vorsilbe haben. Dann solltest Du das auch machen, bevor Du etwas mit den Namen anfängst.
Code: Alles auswählen
buffer = [10,300,500,70,100]
while True:
vorsilbe = raw_input("Buffername eingeben:")
if not any(arcpy.Exists("{}_{}".format(vorsilbe, x)) for x in buffer):
break
print "Buffer existiert schon"
for x in buffers:
name = "{}_{}".format(vorsilbe, x)
arcpy.Buffer_analysis(strassen, name, x, "FULL", "ROUND", "ALL")