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

Freitag 31. März 2006, 13:48

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 31. März 2006, 19:13

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 Modvoice
lemmi
User
Beiträge: 19
Registriert: Dienstag 28. März 2006, 17:45

Freitag 31. März 2006, 21:03

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:

Freitag 31. März 2006, 22:29

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 31. März 2006, 23:26

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 Modvoice
lemmi
User
Beiträge: 19
Registriert: Dienstag 28. März 2006, 17:45

Samstag 1. April 2006, 17:56

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

Sonntag 16. April 2006, 00:27

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:

Sonntag 16. April 2006, 09:13

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 17. April 2006, 20:08

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 Modvoice
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Dienstag 18. April 2006, 15:33

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 18. April 2006, 15:40

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 Modvoice
icepacker
User
Beiträge: 49
Registriert: Dienstag 15. November 2005, 18:48

Dienstag 18. April 2006, 15:41

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:

Dienstag 18. April 2006, 15:43

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

Dienstag 18. April 2006, 15:44

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

Dienstag 18. April 2006, 15:48

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 -
Antworten