input automatisch bestaetigen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
lemmi
User
Beiträge: 19
Registriert: Dienstag 28. März 2006, 17:45

ist is moeglich, dass bei einem input-befehl, nach der eingabe des 2. zeichens kein enter mehr benoetigt wird?
also dass ich nur eingeben muss z.B.:
54263635 und er mir das dann zerlegt in 54 26 36 35, mich aber jede 2 zeichen erneut fragt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich glaube (allerdings verstehe ich dein Problem nicht exakt) dass dir da msvcrt.getche() helfen kann.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lemmi
User
Beiträge: 19
Registriert: Dienstag 28. März 2006, 17:45

also man soll zu eingabe aufgefordert werden, jedoch ist diese soll diese nach dem 2ten zeichen selbst `enter` druecken.
klingt etwas bloed, zugegeben, ich kanns aber nicht besser formulieren.

bsp:
  • naechste zahl (warte): 56 OK
    naechste zahl (warte): 98 OK
    naechste zahl (warte): 75 OK
    naechste zahl (warte): 05 OK
    naechste zahl (warte): 12 OK
    naechste zahl (warte): 6
alles was ich in die konsole eingeben moechte ist 56987505126 ohne jegliches enter und leerzeichen
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Probier mal (zumindest unter Unix, wo's msvcrt.getch() nicht gibt):

Code: Alles auswählen

import sys
import termios
import tty

old = termios.tcgetattr(sys.stdin.fileno())
tty.setraw(sys.stdin.fileno())

zahlen = []
while True:
  sys.stdout.write("Bitte zwei Ziffern eingeben: ")
  try:
    zahlen.append(int(sys.stdin.read(2)))
  except ValueError:
    break
  sys.stdout.write("%s OK\r\n" % zahlen[-1])

termios.tcsetattr(sys.stdin.fileno(),termios.TCSADRAIN,old)
sys.stdout.write(" Abgebrochen...\r\n")

print "Eingegeben:", zahlen
Das ganze funktioniert nur mit ungepuffertem stdin (deswegen die ganze tty und termios-Magie, die aber wie der Name schon sagt nur auf ein tty funktioniert, nicht auf eine Pipe oder ähnliches).
--- Heiko.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Das fand ich recht witzig, deswegen noch eine Version mit msvcrt:

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import sys, msvcrt

def two_input():
    print 'Press Enter to quit'
    inputs = []
    while True:
        sys.stdout.write('Insert number: ')
        ch1 = msvcrt.getch()
        if ch1 == '\r':
            sys.stdout.write('\n')
            return inputs
        sys.stdout.write(ch1)
        ch2 = msvcrt.getch()
        sys.stdout.write(ch2)
        
        inputs.append(ch1)
        inputs.append(ch2)
        sys.stdout.write('\n')

def main():
    stuff = ''.join(two_input())
    print 'Wrote ', stuff

if __name__ == '__main__':
    main()
Ich denke, dass man es auch hätte schöner machen können, aber das demonstriert zumindest das Prinzip.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lemmi
User
Beiträge: 19
Registriert: Dienstag 28. März 2006, 17:45

ich bedanke mich mal.
ich werde das dann morgen mal ausprobieren!
lemmi
User
Beiträge: 19
Registriert: Dienstag 28. März 2006, 17:45

sorry, dass ich das nochmal ausgrabe, aber bin jetzt erst dazu gekommen.
das 2. beispiel geht nicht. es gipt die ganze zeit nur aus, und es laesst sich auch nicht mehr abbrechen.
das 1. weiß ich nicht, konnte es noch nicht unter geeigneten bedingung testen.


mal dazu, fuer was ich das brauche.
ich hab hier zuhause nen 20 seiten wuerfel herumfliegen und wollte mal so schauen wie oft welche zahl vorkommt usw.
es ist durch das script natuerlich schon einfacher ne statistik aufzustellen, dennoch verbesserungsfaehig. ein ansatz waere dazu halt gewesen das enter nicht mehr druecken zu muessen.
der script sieht chaotisch aus, ich weiß, bin halt noch am anfang.

Code: Alles auswählen

# ------------------------------------------------------------------------------
def input_e():

    liste = []
    zaehler = 0
    
    while True:
        x = raw_input('naechste zahl: ')    #Eingabe

        try:
            x = int(x)  #Value Error, falls keine Eingabe
            if x > 20:  #Pruefe, ob X erlaubt ist, wenn nicht, neuer Versuch
                print 'zahl groesser 20!'
                continue
        
        except ValueError: 

            if x == 'fertig':   #Falls "fertig" eingegebn ist, Schleife beenden
                break

            if x == '': #Falls keine Eingabe: moeglichkeit neuer Versuch oder 
                frage = raw_input('fertig? (J/N): ')    #Schleife zu beenden
                if frage == 'N':
                    continue
                else:
                    break
                       
        else:   #Falls es keine Ausnahmen gab:
            liste.append(x) #Fuege X zur liste hinzu
            zaehler = zaehler + 1 
            print 'OK'

    return zaehler, liste

#-------------------------------------------------------------------------------
#main:

zaehler, liste = input_e()
print ''
durchschnitt = 0        

for nummer in range(0, zaehler):    
    print 'nummer %2d: %2d' % (nummer, liste[nummer]) #Gebe die Haeufigkeit
    durchschnitt = durchschnitt + liste[nummer] #jeder Zahl aus und bilde die
                                                #Summe aller Zahlen der Liste
print ''
durchschnitt = float(durchschnitt) / float(zaehler) #Errechne Durchschnitt

for nummer in range(1, 21): #Statistik fuer jede zahl
    print 'nummer %2d: %2d   abweichung:  %2d sollte %2.3f mal vorkommen. %2.5f%%' % (nummer, liste.count(nummer), nummer, float(zaehler) / 20, float(liste.count(nummer)) * 100 / float(zaehler))

print "Durchschnitt:", durchschnitt
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Kennst Du Dich ein bisschen mit Statistik aus? Ich denke mal dass es darum ging zu testen ob der Würfel gezinkt ist oder nicht, dafür reichts aber nicht einfach nur die Differenzen zu den Erwartungswerten zu berechnen, sondern man muß mittels eines Konfidenzintervalles und zum Beispiel des Chi²-Tests rausfinden inwiefern die Hypothese dass der Würfel in Ordnung ist abzulehnen ist.

Ich kann mal schauen ob ich das irgendwo noch mal ausgraben kann; ich hab zumindest ein Buch darüber. ;-)
--- Heiko.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

lemmi hat geschrieben:das 2. beispiel geht nicht. es gipt die ganze zeit nur aus, und es laesst sich auch nicht mehr abbrechen.
Doch, wenn dich Enter drücke beendet es sich ganz brav.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Schließe ich richtig daraus, dass ich, wenn ich plattformunabhängig sein will,
zuerst das Betriebssystem abfragen muss und danach dann entweder den einen oder den anderen Skript ausführen muss? Wäre sehr umständlich für eine kleine Hilfestellung!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

murph hat geschrieben:Schließe ich richtig daraus, dass ich, wenn ich plattformunabhängig sein will, zuerst das Betriebssystem abfragen muss und danach dann entweder den einen oder den anderen Skript ausführen muss?
Ja.
Beschwer dich bei Microsoft, warum die nicht POSIX-Kompatibel sind oder bei den Entwicklern deiner libc warum sie die Funktionen der C-Runtime von Microsoft nicht bereitstellt.

Vielleicht kannst du es unter Linux auch mit curses versuchen, aber ich habe keine Lust das nun auszuprobieren, weil curses mich deprimiert :x
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
icepacker
User
Beiträge: 49
Registriert: Dienstag 15. November 2005, 18:48

Wie kommst du darauf?
Meinst du wegen den Posts von modelnine&Leonidas?

Beide haben Module importiert die nunmal plattformabhängig sind.
Ein "normales" Pythonscript läuft aber, einmal gecodet, überall da wo ein
Python Interpeter installiert ist.
ubuntu linux !!
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Wieso deprimiert dich curses?
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Ein "normales" Pythonscript läuft aber, einmal gecodet, überall da wo ein
Python Interpeter installiert ist.
Hui. Eine gewagte These. Ich habe ein ganz normales Python-Skript geschrieben, genauso wie Leonidas, mit dem Unterschied, dass wir Funktionalität benutzen, die zwar von der Python-Stdlib gewrappt ist, aber nur unter einem bestimmten Systemtyp. In der Dokumentation ist genau dokumentiert wo/was/wie gebraucht/angeboten wird, dementsprechend muß man einfach da nachgucken, und eben "um die Inkompatibilitäten" rumprogrammieren. Das ist aber im Normalfall kein Problem.
--- Heiko.
mr.hide
User
Beiträge: 108
Registriert: Montag 29. August 2005, 14:02

Bastel doch einfach ein GUI. Das kriegt man Plattformunabhängig hin.

Und ist auch nicht so aufwendig...
Grüße
Matthias

- Fluchen befreit von Kummer und Leid -
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

murph hat geschrieben:Wieso deprimiert dich curses?
Weil es grausig unpythonisch ist, weil es mein Terminal immer wenn es einen Fehler gibt zerschießt, weil nichts so funktioniert, wie man das gerne hätte, weil es umständlich ist, weil es sowieso nur unter Unices funktioniert...
Ist natürlich nur meine Meinung, YMMV.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Ich hielt es für erwiesen, dass die eine Methode Windows-, die andere Methode Linuxangepasst war. Durch diesen speziellen Zusammenhang dachte ich, dass es sehr wohl nicht zueinander kompatibel ist.
Oder benutzt Windows etwa tty?

Ich weiß, dass Python (eigentlich) Plattformunabhägig ist, deshalb habe ich ja auch diese Sprache als Zweitsprache gewählt (erste ist PHP)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hi murph!

Dort findest du eine Liste der eingebauten Python-Module:
http://www.python.org/doc/2.4.3/modindex.html

Falls ein Modul nur auf einem bestimmtes Betriebssystem funktioniert, steht das dabei. Das sind meistens spezielle Sachen, die es nur bei diesem Betriebssystem gibt.

Das Modul _winreg ist nur für Windows, weil nur Windows eine Registry hat. Das Modul NIS gibt es nur für UNIX/Linux weil das ein typisches Produkt für unixoide Systeme ist. Windows kann normalerweise mit so etwas nichts anfangen. Alles klar?

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Ich habe das Gefühl, dass wir aneinander vorbeireden.
Ich will (nicht alleine) ein automatisches "enter" nach x Zeichen.
Dieses sollte plattformunabhängig sein. Scheint es aber nicht zu sein.
Sehe ich das richtig?

@ichweissnicht:
in dem Moduleindex wird curses als plattformunabhägig angegeben.

@forummaster: Kann man einstellen, dass man beim Editieren auch die vorigen Posts sehen kann?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

murph hat geschrieben:Ich will (nicht alleine) ein automatisches "enter" nach x Zeichen.
Dieses sollte plattformunabhängig sein. Scheint es aber nicht zu sein.
Sehe ich das richtig?
In etwa. Unter Linux gibt es den einen Weg, unter WIdnows den anderen. Aber du kannst beide Wege in einem Script verwenden und zur Luafzeit bestimmen, welchen Weg du gehst.
murph hat geschrieben:in dem Moduleindex wird curses als plattformunabhägig angegeben.
Curses Module Documentation hat geschrieben:While curses is most widely used in the Unix environment, versions are available for DOS, OS/2, and possibly other systems as well. This extension module is designed to match the API of ncurses, an open-source curses library hosted on Linux and the BSD variants of Unix.
Ergo: Linux und BSD.
murph hat geschrieben:@forummaster: Kann man einstellen, dass man beim Editieren auch die vorigen Posts sehen kann?
Beim Antworten auf Threads? Ja, ist sogar schon eingestellt, ich sehe die vorherigen Antworten auf diesen Thread.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten