Hallo wir haben in der schule eine aufgabe bekommen. Wir sollen 17+4 ohne print oder rawinput programieren sondern mit einer console und cputs & cgets.
Wir müssen bei dieser aufgabe keine Klassen benutzen.
Also es soll am anfang des programms eine namen abfrage stattfinden danach soll der computer und der user eine karte ziehen nun hat der user 8 züge d.h er kann 8 mal ziehen(genauso wie der computer).
er kann aber auch aufören oder das spiel beenden. es sollen so viele spiele stattfinden bis der user beenden drückt.
die karten dees computers sollen mit XX dargestellt werden erts in der auswertung wer gewonnen hat steht welche karten der computer gezogen hat.
Ganz am ende soll der punktestand des computers und des user angezeigt werden und wer der gewinner ist.
der computersoll sich ein zufalls ziel zw. 13-17 suchen und erst dann nicht mehr ziehen wenn er es erreicht hat oder drüber ist.
Es wäre super wenn mir jemand helfen könnte.
Vielleicht hat es ja sogar schon jemand geschrieben.
17 + 4
oh sorry bin neu.
so ich habs bisher nur mit print und so gemacht und auch kein plan wie ich es mit console macahe.
wie implentiere ich überhaupt die console bei mir aufm rechner.
und wo bekomm ich sie her? so hier mein prog ohne console:
Edit (Leonidas): Code in Python Tags gesetzt.
so ich habs bisher nur mit print und so gemacht und auch kein plan wie ich es mit console macahe.
wie implentiere ich überhaupt die console bei mir aufm rechner.
und wo bekomm ich sie her? so hier mein prog ohne console:
Code: Alles auswählen
#Import
from random import * # Importieren der Zufallsfunktion
import sys # Importieren von Systemfunktionen
#Definition
def zieheKarte(kartenspiel):
zufall = randint(0,(len(kartenspiel)-1)) # Funktion, um eine Karte zu ziehen
kartenziehung = kartenspiel[zufall] # Hierbei wird Zufallsauswahl angewandt
del kartenspiel[zufall]
return kartenziehung
def stringKarte(karte): # Funkction, zum Ausgeben der gezogenen Karte
ausgabestring = str(karte) + " "
return ausgabestring
#Hauptprogram
print "Willkommen bei 17+4\n"
username = raw_input("Bitte Ihren Namen eingeben: ")
print 80 * "-" + "\n"
stop = False
while stop == False:
talon = [2,3,4,7,8,9,10,11,2,3,4,7,8,9,10,11,2,3,4,7,8,9,10,11,2,3,4,7,8,9,10,11,]
print "Los geht's!\n"
userkarten = []
userpunkte = 0
computerkarte = "XX"
computerpunkte = 0
userausgabe = username + ": "
computerausgabe = "Computer: "
ukarte = zieheKarte(talon)
userkarten.append(ukarte)
userausgabe += stringKarte(ukarte)
userpunkte += ukarte
print userausgabe
computerausgabe += stringKarte(computerkarte)
computerpunkte += zieheKarte(talon)
print computerausgabe
verloren = False
while verloren == False and len(talon) > 0:
weiterziehen = raw_input("weitere (K)arte ziehen, (a)ufhoeren oder Spiel (b)eenden? ").lower()
print "\n"
if weiterziehen == "k":
ukarte = zieheKarte(talon)
userkarten.append(ukarte)
userausgabe += stringKarte(str(ukarte))
userpunkte += ukarte
print userausgabe
print computerausgabe + "\n"
elif weiterziehen == "a":
break
elif weiterziehen == "b":
stop = True
break
elif weiterziehen != "k" and weiterziehen != "a":
"Fehleingabe. Bitte nochmal versuchen."
if userpunkte > 21:
print username + " " + "hat zu viele Punkte und schon hoffnungslos verloren."
print username + ":" + str(userpunkte)
print "Computer:" + str(computerpunkte)
print 80 * "-" + "\n"
verloren = True
zufallsgrenze = randint(15,21)
while computerpunkte <= zufallsgrenze and verloren == False and len(talon) > 0 and stop == False:
if computerpunkte > userpunkte:
break
computerausgabe += stringKarte(computerkarte)
computerpunkte += zieheKarte(talon)
print computerausgabe + "\n"
if computerpunkte > 21 and userpunkte <= 21 and verloren == False and stop == False:
print "Der Computer hat ueberzogen und somit verloren.\n"
print username + ":" + " " + str(userpunkte)
print "Computer: " + str(computerpunkte) + "\n"
print "Herzlichen Glueckwunsch zum Sieg," + " " + username + "\n"
print 80 * "-" + "\n"
if userpunkte > computerpunkte and userpunkte <= 21 and verloren == False and stop == False:
print 'Herzlichen Glueckwunsch,', username, ',Sie haben gewonnen!!!'
print username + ":" + " " + str(userpunkte)
print "Computer:" + " " + str(computerpunkte) + "\n" # Spielstandsauswertung
print 80 * "-" + "\n"
if userpunkte == computerpunkte and userpunkte <= 21 and verloren == False and stop == False:
print 'Das Spiel endet unentschieden.'
print username + ":" + " " + str(userpunkte)
print "Computer:" + " " + str(computerpunkte) + "\n"
print 80 * "-" + "\n"
if userpunkte < computerpunkte and computerpunkte <= 21 and verloren == False and stop == False:
print 'Herzliches Beileid,', username, ',Sie haben leider verloren.'
print username + ":" + " " + str(userpunkte)
print "Computer:" + " " + str(computerpunkte) + "\n"
print 80 * "-" + "\n"
if stop == True:
print "Vielen Dank fürs Spielen und bis zum naechsten Mal!"
print 80 * "-"
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Cget? Cput? Console? Was meinst du damit?noop hat geschrieben:Hallo wir haben in der schule eine aufgabe bekommen. Wir sollen 17+4 ohne print oder rawinput programieren sondern mit einer console und cputs & cgets.
Also wenn du print nicht nutzen darst, nimm sys.stdout.write() und statt raw_input(), str(input()).
Achja, nutze lieber keine * Imports, das führt zu grandiosen Fehlern.
Edit: Bin grade dabei deinen Code etwas umzubiegen. "Hold your breath"

Edit2: Vorabversion, nur etwas aufgeräumt:
Code: Alles auswählen
#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import random, sys
def zieheKarte(kartenspiel):
zufall = random.randint(0, len(kartenspiel) - 1)
kartenziehung = kartenspiel[zufall]
return kartenziehung
def stringKarte(karte):
ausgabestring = "%d " % karte
return ausgabestring
def main():
print "Willkommen bei 17+4"
print
username = raw_input("Bitte Ihren Namen eingeben: ")
print 80 * "-"
print
stop = False
while stop != True:
karten = range(2, 5) + range(7, 12)
talon = list()
for karte in karten:
talon.extend([karte, karte, karte, karte])
print "Los geht's!"
print
userkarten = []
userpunkte = 0
computerkarte = "XX"
computerpunkte = 0
userausgabe = "%s: " % username
computerausgabe = "Computer: "
ukarte = zieheKarte(talon)
userkarten.append(ukarte)
userausgabe += stringKarte(ukarte)
#userpunkte += ukarte
print userausgabe
computerausgabe += "XX "
computerpunkte += zieheKarte(talon)
print computerausgabe
verloren = False
while verloren == False and len(talon) > 0:
weiterziehen = raw_input("weitere (K)arte ziehen, (a)ufhören oder Spiel (b)eenden? ").lower()
print
if weiterziehen == "k":
ukarte = zieheKarte(talon)
userkarten.append(ukarte)
userausgabe += stringKarte(ukarte)
userpunkte += ukarte
print userausgabe
print computerausgabe
print
elif weiterziehen == "a":
stop = True
break
elif weiterziehen == "b":
break
elif weiterziehen != "k" or weiterziehen != "a":
"Fehleingabe. Bitte nochmal versuchen."
if userpunkte > 21:
print "%s hat zu viele Punkte und schon hoffnungslos verloren." % username
print "%s: %d" % (username, userpunkte)
print "Computer: %d" % computerpunkte
print 80 * "-"
print
verloren = True
zufallsgrenze = random.randint(15,21)
while computerpunkte <= zufallsgrenze and verloren == False and len(talon) > 0 and stop == False:
if computerpunkte > userpunkte:
break
computerausgabe += stringKarte(computerkarte)
computerpunkte += zieheKarte(talon)
print computerausgabe
print
if computerpunkte > 21 and userpunkte <= 21 and verloren == False and stop == False:
print "Der Computer hat überzogen und somit verloren."
print
print "%s: %d" % (username, userpunkte)
print "Computer: %d" % computerpunkte
print
print "Herzlichen Glueckwunsch zum Sieg, %s" % username
print
print 80 * "-"
print
if userpunkte > computerpunkte and userpunkte <= 21 and verloren == False and stop == False:
print 'Herzlichen Glueckwunsch, %s, Sie haben gewonnen!!!' % username
print '%s: %d' % (username, userpunkte)
print "Computer: %d" % computerpunkte
print
print 80 * "-"
print
if userpunkte == computerpunkte and userpunkte <= 21 and verloren == False and stop == False:
print 'Das Spiel endet unentschieden.'
print "%s: %d" % (username, userpunkte)
print "Computer: %d", computerpunkte
print
print 80 * "-"
print
if userpunkte < computerpunkte and computerpunkte <= 21 and verloren == False and stop == False:
print 'Herzliches Beileid, %s, Sie haben leider verloren.' % username
print '%s: %d' % (username, userpunkte)
print "Computer: %d" % computerpunkte
print
print 80 * "-"
print
if stop == True:
print "Vielen Dank fürs Spielen und bis zum nächsten Mal!"
print 80 * "-"
if __name__ == '__main__':
main()
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi Leonidas!
Gruß, mawe
Willst Du ihm jetzt doch die Hausaufgaben machen? Dein Fleiß in allen Ehren, aber lass ihn doch selbst ein wenig herumbasteln, sonst lernt er doch nichts dabeiLeonidas hat geschrieben: Bin aber noch dran, keine Angst, das wird schon.

Gruß, mawe
so ich habs jetzt soweit mit console und allem geschaft.
jetzt hab ich noch die frage wie ich vor begin eine namens abfrage machen kann.
und das wenn ich schon über 21 habe nicht mehr ziehen kann.
Bitte um hilfe.
und wenn noch was zum verbessern gibt sagt es mir und hilft mir bitte.
die reihen folge in der ich das prog struktoriert habe ist auch ziemlich wichtig so den so hab ich nen überblick was in die defs und was in das Hauptprog gehört usw.
Edit (Leonidas): Code in Python Tags gesetzt. Bitte das nächste mal selbst machen, ok? Sonst kann man die Programme nicht lesen und ausführen.
jetzt hab ich noch die frage wie ich vor begin eine namens abfrage machen kann.
und das wenn ich schon über 21 habe nicht mehr ziehen kann.
Code: Alles auswählen
# _*_ coding: cp1252 _*_
# BigDigits
# Sebastian Hoopmann DQI04
#Import
import console, random
MAXZIEHEN = 8
RAND = 10
#Definition
def zieheKarte(kartenspiel):
zufall = random.randint(0,(len(kartenspiel)-1))
karte = kartenspiel[zufall]
kartenspiel.remove(karte)
return karte
def spielAnzeige(karte, runde, cpu, verdeckt):
con.gotoXY(RAND + runde * 4, 0 + int(not cpu))
if cpu:
if verdeckt:
con.cPuts('XX')
else:
con.cPuts('%2d'% (karte))
else:
con.cPuts('%2d'% (karte))
def deckeComputerzuegeAuf(computerzuege):
runde = 0
for karte in computerzuege:
spielAnzeige(karte, runde, True, False)
runde += 1
def auswertung(spielersumme, cpusumme):
while True:
if spielersumme > 21 and cpusumme > 21:
con.gotoXY(0, 7)
con.cPuts('Es gibt keinen Sieger')
break
if spielersumme > 21 and cpusumme <= 21:
con.gotoXY(0, 7)
con.cPuts('Der Computer hat gewonnen')
break
if spielersumme <= 21 and cpusumme > 21:
con.gotoXY(0, 7)
con.cPuts('Sie haben gewonnen')
break
if spielersumme == 21 and cpusumme == 21:
con.gotoXY(0, 7)
con.cPuts('Der Computer hat gewonnen')
break
if spielersumme == 21:
con.gotoXY(0, 7)
con.cPuts('Sie haben gewonnen')
if cpusumme == 21:
con.gotoXY(0, 8)
con.cPuts('Der Computer hat gewonnen')
if spielersumme == cpusumme:
con.gotoXY(0, 7)
con.cPuts('Das Spiel endet unentschieden')
# Hauptprogramm
con = console.Console()
random.seed()
while True:
kartendeck = [2,2,2,2,3,3,3,3,4,4,4,4,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11]
spielersumme = 0
cpusumme = 0
computerzuege = []
runde = 0
cpugrenze = random.randint(14,20)
con.clrScr()
con.gotoXY(0, 0)
con.cPuts('Computer:')
con.gotoXY(0, 1)
con.cPuts('Spieler:')
eingabe = 'j'
while eingabe: # Der Computer zieht eine Karte. Er zeiht so lange,
if cpusumme < cpugrenze: # bis er seine Gefuehlsgrenze ueberschreitet.
karte = zieheKarte(kartendeck)
computerzuege.append(karte)
spielAnzeige(karte, runde, True, True)
cpusumme += karte
if eingabe == 'j': # Der Spieler zieht, wenn seine eingabe == 'j' ist.
con.gotoXY(0, 3)
con.cPuts('Wollen Sie eine Karte ziehen? [j]a oder [n]ein: ')
eingabe = con.cGets(1)
con.gotoXY(47, 3)
con.cPuts(' ')
if eingabe == 'j':
karte = zieheKarte(kartendeck)
spielAnzeige(karte, runde, False, True)
spielersumme += karte
runde += 1
if runde == MAXZIEHEN or (eingabe != 'j' and cpusumme >= cpugrenze): # Ueberpruefung, ob das Spiel fortgesetzt wird.
break
# Ausgabe
deckeComputerzuegeAuf(computerzuege) # Die Karten des Computers werden aufgedeckt
auswertung(spielersumme, cpusumme) # Die Auswertung
con.gotoXY(0, 5)
con.cPuts('Wollen Sie noch eine Runde spielen? [j]a oder [n]ein: ')
eingabe = con.cGets(1)
if eingabe == 'j': # Falls eingabe == 'j', dann wird ein neues Spiel begonne.n
continue
else: # Falls eingabe != 'j' dann wird abgebrochen und der Bildschirm geloescht.
con.clrScr()
break
und wenn noch was zum verbessern gibt sagt es mir und hilft mir bitte.
die reihen folge in der ich das prog struktoriert habe ist auch ziemlich wichtig so den so hab ich nen überblick was in die defs und was in das Hauptprog gehört usw.
Edit (Leonidas): Code in Python Tags gesetzt. Bitte das nächste mal selbst machen, ok? Sonst kann man die Programme nicht lesen und ausführen.
bei meinem ersten versuch noch ohne import hab ich das mit dem nicht mehr ziehen bei über 21 hin bekommen.
außerdem fand ich es auch besser das man erst alleine zieht und dann erst der com aber wenn ich das ändere bekomm ich immer eine Fehler meldung
außerdem fand ich es auch besser das man erst alleine zieht und dann erst der com aber wenn ich das ändere bekomm ich immer eine Fehler meldung
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Naja, hast ja recht. Aber wenn ich sowas wie:mawe hat geschrieben:Willst Du ihm jetzt doch die Hausaufgaben machen? Dein Fleiß in allen Ehren, aber lass ihn doch selbst ein wenig herumbasteln, sonst lernt er doch nichts dabei![]()
Code: Alles auswählen
kartendeck = [2,2,2,2,3,3,3,3,4,4,4,4,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11]

Ich sollte mich wirklich nicht von fremden Hausaufgaben hinreißen lassen.

My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
was is an der liste so schlimm?
sollte ich die einfacah über mehr zeilen ziehen oder was?
sagt was ich falsch mache, wie soll ich es lernen wenn mir keiner sagt was daran falsch ist
sollte ich die einfacah über mehr zeilen ziehen oder was?
sagt was ich falsch mache, wie soll ich es lernen wenn mir keiner sagt was daran falsch ist
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Sie hat lauter Wiederholungen.Anonymous hat geschrieben:was is an der liste so schlimm?
Ich habe es nicht nur gesagt, ich habe es bereits in mein Programm eingebaut (siehe oben).Anonymous hat geschrieben:sagt was ich falsch mache, wie soll ich es lernen wenn mir keiner sagt was daran falsch ist
Code: Alles auswählen
karten = range(2, 5) + range(7, 12)
talon = list()
for karte in karten:
talon.extend([karte, karte, karte, karte])
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
es wiederhol sich alles weil jede karte 4 mal im deck ist und das prog was geändert wurde hat irgendwie bei mir komische fehler z.B wenn ich über 21 habe bricht er nicht von selber ab hat er vorher aber.
Bei meinem neuen prog mit console bekomm ich auch einiges nicht so hin wie ich will ich sag ma so ich muss das prog heute abgeben und bin zufreiden mit dem was ich geschafft habe hätte nicht gedacht das ich es ohne print zum laufen bekomme.
also wenn ihr mir nur sagt was ich besser machen könnte und mir noch ein paar tipps gebt wäre kich euch dankbar ihr müsst mir ja nicht das prog schreiben
*gg was ich natürlich auch nicht schlecht finden würde
Bei meinem neuen prog mit console bekomm ich auch einiges nicht so hin wie ich will ich sag ma so ich muss das prog heute abgeben und bin zufreiden mit dem was ich geschafft habe hätte nicht gedacht das ich es ohne print zum laufen bekomme.
also wenn ihr mir nur sagt was ich besser machen könnte und mir noch ein paar tipps gebt wäre kich euch dankbar ihr müsst mir ja nicht das prog schreiben
*gg was ich natürlich auch nicht schlecht finden würde
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Deswegen habe ich ja vorgeschlagen, dieses vierfache Einfügen automatisch zu machen. Macht auch eindruck bei Lehrern, wenn dein Programm auch noch elegant ist.Anonymous hat geschrieben:es wiederhol sich alles weil jede karte 4 mal im deck ist und das prog was geändert wurde hat irgendwie bei mir komische fehler z.B wenn ich über 21 habe bricht er nicht von selber ab hat er vorher aber.
Der Rest ist ein typischer Fall für print-Debugging
Eine Sammlung Tipps hält Python selbst für dich bereit:Anonymous hat geschrieben:also wenn ihr mir nur sagt was ich besser machen könnte und mir noch ein paar tipps gebt wäre kich euch dankbar ihr müsst mir ja nicht das prog schreiben
Code: Alles auswählen
import this
Ich werde mich diesmal an mawe's Tipp halten und es nicht machen. Ist nur zu deinem eigenen besten, wie man so schön sagt.Anonymous hat geschrieben:*gg was ich natürlich auch nicht schlecht finden würde
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Na toll, jetzt bin ich wieder der BöseLeonidas hat geschrieben: Ich werde mich diesmal an mawe's Tipp halten und es nicht machen. Ist nur zu deinem eigenen besten, wie man so schön sagt.

Hi. Das kann ich wiederum nicht stehen lassen:Leonidas hat geschrieben:Code: Alles auswählen
karten = range(2, 5) + range(7, 12) talon = list() for karte in karten: talon.extend([karte, karte, karte, karte])
Code: Alles auswählen
karten=reduce(lambda a,b:a+b,[(i,)*4 for i in xrange(2,12) if i not in (5,6)],())

-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ne, du hast mich einfach wieder an die Forenprinzipien erinnert.mawe hat geschrieben:Na toll, jetzt bin ich wieder der Böse

Das ist aber wirklich eine nette KonstruktionMilan hat geschrieben:Hi. Das kann ich wiederum nicht stehen lassen:Ist aber genausoschön, wie die lange Liste voller ZahlenCode: Alles auswählen
karten=reduce(lambda a,b:a+b,[(i,)*4 for i in xrange(2,12) if i not in (5,6)],())

Code: Alles auswählen
talon = []
for karte in range(2, 5) + range(7, 12):
talon.extend([karte] * 4)

My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Wie wäre es mit
Code: Alles auswählen
talon=[]
for karte in xrange(2,12):
if karte not in (5,6):
talon.extend([karte]*4)