Vorbereitung auf meine Pythonklausur
@sharete: An dem `float()` sollst Du nichts ändern, nur das `input()` durch `raw_input()` ersetzen, denn das ist hier die richtige Funktion.
Okay und wo ist der Unterschied, ob ich nun float(input, oder float(raw_input benutze?BlackJack hat geschrieben:@sharete: An dem `float()` sollst Du nichts ändern, nur das `input()` durch `raw_input()` ersetzen, denn das ist hier die richtige Funktion.
LG
@sharete: Bei einem echten Python 2.x ist `input()` unsicher weil da beliebige Python-Ausdrücke die der Benutzer eingeben kann, ausgewertet werden.
Neues Spiel, neues Glück ..
Also ich soll anzeigen lassen, ob ein bestimmtes Jahr ein Schaltjahr ist oder nicht. Habe soweit einen Code geschrieben, der die Formel beinhaltet und er zeigt mir jedesmal an, wenn es ein Schaltjahr ist. Gebe ich aber mit Absicht ein falsches Jahr ein, wird mir nicht ausgegeben, dass es KEIN Schaltjahr ist. Woran kann das liegen?
LG
Also ich soll anzeigen lassen, ob ein bestimmtes Jahr ein Schaltjahr ist oder nicht. Habe soweit einen Code geschrieben, der die Formel beinhaltet und er zeigt mir jedesmal an, wenn es ein Schaltjahr ist. Gebe ich aber mit Absicht ein falsches Jahr ein, wird mir nicht ausgegeben, dass es KEIN Schaltjahr ist. Woran kann das liegen?
Code: Alles auswählen
x = int(raw_input("Eingabe:"))
if x % 400 == 0:
print "Es ist ein Schaltjahr"
elif x % 100 == 0:
print "Es ist kein Schaltjahr"
elif x % 4 == 0:
print "Es ist ein Schaltjahr"
Zuletzt geändert von Anonymous am Dienstag 6. Juni 2017, 14:38, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Wäre das förmlich so in Ordnung?Sirius3 hat geschrieben:@sharete: zum Code, `x` is kein schöner Name für eine Variable, die ein Jahr repräsentieren soll. Die if-Bedingungen sollten noch mit `and` und `or` zu einer Bedingung zusammengefasst werden.
Code: Alles auswählen
schaltjahr = int(raw_input("Eingabe:"))
if schaltjahr % 400 == 0 or schaltjahr % 4 == 0:
print "Es ist ein Schaltjahr"
else:
print "Es ist kein Schaltjahr"
Code: Alles auswählen
def ungefaehr(x,y):
if abs(x-y) < 0.001:
return True
else:
return False
print ungefaehr(3.14159,3.14)
print ungefaehr(3.14159,3.141)
print ungefaehr(-0.555,-0.5555)
print ungefaehr(-0.555,-0.55)
Zuletzt geändert von Anonymous am Dienstag 6. Juni 2017, 23:34, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
@sharete: Du willst prüfen, ob das Jahr ein Schaltjahr ist, der Variablenname `jahr` wäre dann passender. Bei der Abfrage fehlt noch der Fall, dass Jahre die durch 100 teilbar sind, kein Schaltjahr sind. abs berechnet den Absolutbetrag, kurz:
Code: Alles auswählen
def ungefaehr_gleich(a, b):
return abs(a-b) < 0.001
Hey Leute, ich bins mal wieder. Und zwar:
Mal angenommen, ich habe zwei Listen. In der ersten Liste stehen zufällig Zahlen, also z.B. 12,13,15,16,17. Und die zweite Liste ist gefüllt mit 0 und 1en also z.B. 0,1,1,0,0. Wie kann ich dann auf die beiden Listen so zugreifen, dass in der ersten Liste die Zahlen zusammen addiert werden, wo in der zweiten Liste der Index 1 ist? Also z.B.:
Ich muss dann doch erstmal den index von Y ermitteln, wo die einsen sich befinden und dann den Index von Y auf X übernehmen und diese Zahlen von X addieren. Jedoch habe ich ne Kopfblockade, wie ich dahin komme.
LG
Mal angenommen, ich habe zwei Listen. In der ersten Liste stehen zufällig Zahlen, also z.B. 12,13,15,16,17. Und die zweite Liste ist gefüllt mit 0 und 1en also z.B. 0,1,1,0,0. Wie kann ich dann auf die beiden Listen so zugreifen, dass in der ersten Liste die Zahlen zusammen addiert werden, wo in der zweiten Liste der Index 1 ist? Also z.B.:
Code: Alles auswählen
X = [3,6,4,2,8,5,5,1]
Y = [1,0,0,1,1,1,0,0]
LG
@sharete: um über mehrere Listen gleichzeitig zu iterieren, gibt es `zip`.
Hier ein Beispiel mit sinnvolleren Variablennamen
Statt 0 und 1 sollten in der zweiten Liste False und True stehen.
Hier ein Beispiel mit sinnvolleren Variablennamen
Code: Alles auswählen
values = [3,6,4,2,8,5,5,1]
mask = [1,0,0,1,1,1,0,0]
for value, active in zip(values, mask):
do_someting()
Ah, okay dass mit zip wurde uns gar nicht beigebracht.
Bezüglich der 0,1, wo du meintest dass dort True und False stehen soll, die Liste wurde uns in einem Programmskelett vorgegeben und wir mussten damit arbeiten, trotzdem danke!
Wir hatten eine weitere Aufgabe, wo wir checken sollen, ob die Klammerung richtig stattgefunden hat, dies habe ich so gemacht:
Gibt es sonst noch eine kürzere Variante, oder "bessere"? Zu beachten ist, dass wir wieder ein Programmskelett vorgegeben bekommen haben, wo die XXXXXXXX mit unserem Code ausgetauscht werden soll:
Bezüglich der 0,1, wo du meintest dass dort True und False stehen soll, die Liste wurde uns in einem Programmskelett vorgegeben und wir mussten damit arbeiten, trotzdem danke!
Wir hatten eine weitere Aufgabe, wo wir checken sollen, ob die Klammerung richtig stattgefunden hat, dies habe ich so gemacht:
Code: Alles auswählen
def Klammercheck(S):
asList = list(S)
count = 0
for i in asList:
if i == "(":
count +=1
else:
count -=1
if count == 0:
return True
else:
return False
K1 = "(()(())())()"; K2 = "())()()"; K3 = "((()))()(";
print K1,"ist",Klammercheck(K1)
print K2,"ist",Klammercheck(K2)
print K3,"ist",Klammercheck(K3)
Code: Alles auswählen
def Klammercheck(S):
XXXXXXXXXX
K1 = "(()(())())()"; K2 = "())()()"; K3 = "((()))()(";
print K1,"ist",Klammercheck(K1)
print K2,"ist",Klammercheck(K2)
print K3,"ist",Klammercheck(K3)
Im Grunde zählst Du die Anzahl der öffnenden und die Anzahl der schließenden Klammern. String-Objekte besitzen die Methode count für solche Fälle. Wenn die Differenz gleich 0 ist, so ist die Klammerung nach Deiner Definition richtig. Demnach wäre der Funktionskörper ein Einzeiler.
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Was dort passiert und am Ende bei rauskommt, habe ich ja selbst erarbeitet. Meine Frage war nur, ob der Code so okay ist bzw. ob es "besser" bzw. kürzer geht, mit dem vorgegeben Programmskelett.bwbg hat geschrieben:Im Grunde zählst Du die Anzahl der öffnenden und die Anzahl der schließenden Klammern. String-Objekte besitzen die Methode count für solche Fälle. Wenn die Differenz gleich 0 ist, so ist die Klammerung nach Deiner Definition richtig. Demnach wäre der Funktionskörper ein Einzeiler.
Ich würde behaupten, die Klammeranzahl darf zwischendurch nie negativ sein.
Das sollte vermutlich auch ungültig sein, oder?
Code: Alles auswählen
))((
@sharete: Funktionsnamen sollten Tätigkeiten beschreiben, am besten in englisch, weil die anderen Schlüsselwörter auch englisch sind, so hat man keinen Sprachmix. Variablennamen sollten komplett klein geschrieben werden und sprechend sein, i und S sind das nicht. Man sollte nur eine Anweisung pro Zeile schreiben, ";" sollte man nie benutzen, statt Variablen durchzunummerieren sollte man Listen verwenden. Deinen Code nach den üblichen Konventionen sieht also so aus:
Dann ist alles auch gleich viel lesbarer.
Kurz kann man das dann so schreiben:
Ob das korrekt ist, hat Liffi ja schon angezweifelt.
Code: Alles auswählen
def check_brackets(text):
count = 0
for char in text:
if char == "(":
count += 1
else:
count -= 1
return count == 0
tests = [
"(()(())())()",
"())()()",
"((()))()(",
]
for test in tests:
print test, "ist", check_brackets(test)
Kurz kann man das dann so schreiben:
Code: Alles auswählen
def check_brackets(text):
return text.count("(")*2 == len(text)
Ich würde das ein bisschen defensiver Programmieren und nicht einfach bei jedem beliebigen Zeichen das kleine öffnende Klammer ist, den Zähler verringern. Selbst wenn die Dokumentation von dem Argument einfordert das nur die Zeichen '(' und ')' darin vorkommen dürfen, würde ich mindestens ein ``assert`` für den Fall vorsehen das doch etwas anderes vorkommt.
Das mit dem Aufsummieren wenn in der zweiten Liste eine 1 steht, ist ein klarer Fall für `itertools.compress()`:
Code: Alles auswählen
In [11]: X = [3,6,4,2,8,5,5,1]
In [12]: Y = [1,0,0,1,1,1,0,0]
In [13]: sum(itertools.compress(X, Y))
Out[13]: 18
BlackJack hat geschrieben:Das mit dem Aufsummieren wenn in der zweiten Liste eine 1 steht, ist ein klarer Fall für `itertools.compress()`:Code: Alles auswählen
In [11]: X = [3,6,4,2,8,5,5,1] In [12]: Y = [1,0,0,1,1,1,0,0] In [13]: sum(itertools.compress(X, Y)) Out[13]: 18
Wenn ich den Code so eingebe kriege ich den error:
Code: Alles auswählen
Line 4: NameError: name 'itertools' is not defined