2017-01-22 2 views
-1

Ich habe angefangen, ein Programm in Python zu schreiben, wo der Benutzer eingibt, wie viele Leerzeichen er nach oben/unten und links/rechts verschieben soll, und dazu die .split() - Funktion benutzt habe Programm bekomme ich den Fehler 'Wert Fehler: zu viele Werte zu entpacken (zwei erwartet)', wenn nur zwei gegeben sind. Würde es sehr schätzen, wenn mir jemand half, dieses Problem zu lösen. Ich habe meinen Code unten angehängt: /Bearbeiten- Ich habe angebracht all meinen Code unten:Warum erhalte ich einen Wert Fehler: zu viele Werte zu entpacken?

choice=0 
b=0 
oldP=0 
newP=0 
player_location=' X ' 
x=8 
y=0 
xi=0 
yi=0 
up=0 
down=0 
left=0 
right=0 
new_board=[xi][yi] 
gold_coins=0 
bandits=5 
treasure_chests=10 
a=1 
xi2=0 
yi2=0 

import random 
def menu(): 
    print('If you would like to play the Treasure Hunt , press 1') 
    choice=input('If not, press any key to exit') 
    if choice=='1': 
     print('Great! You have made the right choice :)') 
    else: 
     print('Goodbye.') 
     quit() 
menu() 
def grid(): 
    new_board = [ ] 

def board(): 
    new_board = [ ] 
    top_row = [' 1 ',' 2 ',' 3 ',' 4 ',' 5 ',' 6 ',' 7 ',' 8 '] 

    new_board.append(top_row) 

    for x in range(0,8): 
    row = [' 0 ']*8 
    new_board.append(row) 
    return new_board 

def print_board(b): 
    row_numbers = [' ','1','2','3','4','5','6','7','8'] 
    i = 0 
    for row in b: 
    print (row_numbers[i],''.join(row)) 
    i=i+1 
new_board = board() 
xi=int(8) 
yi=int(0) 
new_board[xi][yi] = player_location 
while a==1: 
    def get_move(): 
     advice = 'Please enter your move in two integers, vertical, then horizontal. Use positive numbers for up and right, negative for down and left.' 
     example = 'For example, an input of \'22\' would be 2 moves vertically, and 2 moves horizontally.' 
     move = input(advice + example) 
     move.split() 
     x_move,y_move=move 
     x_move = int(move[0]) 
     y_move = int(move[1]) 
     return x_move, y_move, move 

while True: 
    print_board(new_board) 
    x_move, y_move = get_move() 
    move(x_move, y_move) # performs the move; updates the board grid() 
+0

Bitte zeigen Sie uns, welche Eingabe Sie dem System geben. –

+0

Traceback oder Sie erhalten ungenaue/Ratespiel Antworten (die am Ende bieten die Lösung, aber mit mehr, unnötigen Aufwand) –

+0

Habe gerade meinen Beitrag mit dem Rest meines Codes aktualisiert! Danke :) – user5095215

Antwort

1

Das Problem ist wahrscheinlich, dass Ihre get_move() Funktion gibt ein Tupel mit drei Werten, während der Anrufer möchte nur holen zwei:


def get_move(): 
    advice = 'Please enter your move in two integers, vertical, then horizontal. Use positive numbers for up and right, negative for down and left.' 
    example = 'For example, an input of \'22\' would be 2 moves vertically, and 2 moves horizontally.' 
    move = input(advice + example) 
    move.split() 
    x_move,y_move=move 
    x_move = int(move[0]) 
    y_move = int(move[1]) 
    return x_move, y_move, move # three values 

    while True: 
     print_board(new_board) 
     x_move, y_move = get_move() # two values? 
     move(x_move, y_move) 

Falls Sie über diese Werte nicht kümmern, können Sie werfen die übrigen zum Beispiel x_move, y_move, *_ mit weg:


def get_move(): 
    advice = 'Please enter your move in two integers, vertical, then horizontal. Use positive numbers for up and right, negative for down and left.' 
    example = 'For example, an input of \'22\' would be 2 moves vertically, and 2 moves horizontally.' 
    move = input(advice + example) 
    move.split() 
    x_move,y_move=move 
    x_move = int(move[0]) 
    y_move = int(move[1]) 
    return x_move, y_move, move # three values 

    while True: 
     print_board(new_board) 
     x_move, y_move,*_ = get_move() 
     move(x_move, y_move) 

Des Weiteren beachten Sie, dass move.split()funktioniert nicht inline, denken Sie daran, dass str (Strings) unveränderlich sind, müssen Sie das Ergebnis fangen, sollten Sie Ihre get_move Funktion so umschreiben:


def get_move(): 
    advice = 'Please enter your move in two integers, vertical, then horizontal. Use positive numbers for up and right, negative for down and left.' 
    example = 'For example, an input of \'22\' would be 2 moves vertically, and 2 moves horizontally.' 
    move = input(advice + example) 
    move =move.split() 
    x_move,y_move=move 
    x_move = int(x_move) 
    y_move = int(y_move) 
    return x_move, y_move, move 

oder etwas Gleichwertiges.

+0

tatsächlich, macht die Split-Sache mich glauben, dass der Entpackungsfehler kommt von 'x_move, y_move = move' zuerst. –

+0

@ Jean-FrançoisFabre: Nun, es scheint zwei Sequenz Entpackungsbefehle zu geben, die zumindest fehleranfällig sind. Außerdem ist die erste (in der Methode) ein bisschen gefährlich, da sie nicht getestet wird, bevor die Zuweisung erfolgt ist. :) –

+0

keine Sorge, Frage ist nicht sehr gut. –

1

Eine vollständige Zurückverfolgungs wäre schön gewesen, aber hier der Fehler liegt auf der Hand: Sie Rückkehr 3 Werte return x_move, y_move, move

und Sie die Rückgabewerte zu 2 Werte zuweisen: x_move, y_move = get_move()

die 3. Rückgabewert entfernen, da die Informationen nutzlos ist bereits in den ersten 2 Koordinatendaten enthalten ist, dass es

Hinweis funktioniert nur, weil Python nicht entscheiden kann, wie die Rückgabewerte den angegebenen Variablen zugewiesen werden sollen (3 => 2). Die Zuweisung an nur eine Variable hätte funktioniert und das 3-dimensionale Tupel gespeichert.

Edit: Willem Antwort weist darauf hin, einen weiteren Fehler: move.split() tut nichts, so dass die auspacken Fehler zuerst encouter ist da:

x_move,y_move=move 

(Sie haben beide Fehler zu beheben für Ihren Code zu arbeiten)

+0

Ahh ich sehe, danke! – user5095215

Verwandte Themen