2017-06-02 2 views
1

Also habe ich Deuces heruntergeladen, Code für Poker-Hand-Bewertungen, und ursprünglich dachte ich, es war in Python 2, weil alle Druckanweisungen keine Klammern hatten. Ich habe all das repariert, und alles scheint zu funktionieren, außer diesem letzten Teil. Hier ist der Code für sie:Bit-Operatoren von Deuces

def get_lexographically_next_bit_sequence(self, bits): 
    """ 
    Bit hack from here: 
    http://www-graphics.stanford.edu/~seander/bithacks.html#NextBitPermutation 

    Generator even does this in poker order rank 
    so no need to sort when done! Perfect. 
    """ 
    t = (bits | (bits - 1)) + 1 
    next = t | ((((t & -t)/(bits & -bits)) >> 1) - 1) 
    yield next 
    while True: 
     t = (next | (next - 1)) + 1 
     next = t | ((((t & -t)/(next & -next)) >> 1) - 1) 
     yield next 

Ich sah online und fand, dass sie Bitoperatoren sind, aber ich verstehe nicht, warum Python sie doesnt zu erkennen. Muss ich etwas importieren, oder sind die Betreiber nicht in Python verwendet 3

File "/Volumes/PROJECTS/deuces/All_poker.py", line 709, in get_lexographically_next_bit_sequence 
next = t | ((((t and -t)/(bits and -bits)) // 2) - 1) 

Typeerror: nicht unterstützte Operandtyp (e) für |: ‚schweben‘ und ‚schweben‘

Dies ist der Fehler, den ich Es ist der letzte Teil der Lookup-Klasse erhalten und der Code kann bei https://github.com/vitamins/deuces/tree/8222a6505979886171b8a0c581ef667f13c5d165

finden

wenn ich schreibe

board = [ Card.new('Ah'), Card.new('Kd'), ('Jc') ] 
hand = [ Card.new('Qs'),Card.new('Th')] 
evaluator=Evaluator() 

Auf der letzten Zeile des Codes bekomme ich den Fehler. Der ganze Code kann in der Verbindung

+0

Können Sie uns sagen, warum Fehler Sie bekommen? Auf den ersten Blick sehe ich nichts falsch mit dem Code, den Sie gepostet haben. –

+0

Sie haben ein Problem nicht erklärt. Mit was können wir Ihnen konkret helfen? –

+2

Ich wette, die Quelle Ihres Fehlers ist der semantische Unterschied zwischen '/' in Python 2 und 3. In Python 2 ist '/' Floor Division, in Python 3 hingegen ist es eine Division und wird wahrscheinlich einen 'float' zurückgeben ', die' TypeError 'mit bitweisen Operatoren auslösen. –

Antwort

0

Es war das/Symbol, wie der Herr sagte über ihn für Bodenteilung sein soll, und schnelle Lösung und es funktioniert gut.

2

gefunden werden In Übereinstimmung mit Arrivillagas Kommentar hatte ich gerade geändert, was Sie zu diesem geschrieben hatten.

def get_lexographically_next_bit_sequence(bits): 
    """ 
    Bit hack from here: 
    http://www-graphics.stanford.edu/~seander/bithacks.html#NextBitPermutation 

    Generator even does this in poker order rank 
    so no need to sort when done! Perfect. 
    """ 
    t = (bits | (bits - 1)) + 1 
    next = t | ((((t & -t) // (bits & -bits)) >> 1) - 1) 
    yield next 
    while True: 
     t = (next | (next - 1)) + 1 
     next = t | ((((t & -t) // (next & -next)) >> 1) - 1) 
     yield next 

for i, g in enumerate(get_lexographically_next_bit_sequence(123)): 
    print (g) 
    if i > 10: 
     break 

Sind diese Ergebnisse zumutbar?

125 
126 
159 
175 
183 
187 
189 
190 
207 
215 
219 
221 
+0

Nein, ich bekomme das nicht –

+0

Würden Sie bitte Ihre Frage bearbeiten, um eine Beispieleingabe und -ausgabe zu geben, und dann einen Kommentar für mich hinterlassen. –

+0

Ich habe es gerade getan, Bill Bell –

Verwandte Themen