格式字符串的参数太多

Too many arguments for format string

在下面的代码中,我在第 132、135、155、158、184、187 行不断收到错误“格式字符串的参数太多”。我还使用了 python 3.7.9由于某种原因使用比 break turtle 更新的版本。

#-----import turtle-----

import turtle as trtl
import random
import time

#-----game configuration-----

current_score = 0
high_score = 0
delay = 0.1

#-----initialize turtle-----

setup = trtl.Screen()
setup.title("Snake Game")
setup.bgcolor('pale green')
setup.setup(width=650, height=660)
setup.tracer(0)

top = trtl.Turtle()
top.speed(0)
top.shape("square")
top.color("dim gray")
top.penup()
top.goto(0, 0)
top.direction = "stop"

blocks= trtl.Turtle()
blocks.speed(0)
blocks.shape("square")
blocks.color("black")
blocks.penup()
blocks.goto(0, 100)

segments = []

scoreboard_score = trtl.Turtle()
scoreboard_score.speed(0)
scoreboard_score.shape("square")
scoreboard_score.color("black")
scoreboard_score.penup()
scoreboard_score.hideturtle()
scoreboard_score.goto(-310, 293)
scoreboard_score.write("Score: 0", align = "left", font=("digital-7", 24, "normal"))

scoreboard_highscore = trtl.Turtle()
scoreboard_highscore.speed(0)
scoreboard_highscore.shape("square")
scoreboard_highscore.color("black")
scoreboard_highscore.penup()
scoreboard_highscore.hideturtle()
scoreboard_highscore.goto(311, 293)
scoreboard_highscore.write("High Score: 0", align = "right", font=("digital-7", 24, "normal"))

border = trtl.Turtle()
border.speed(0)
border.penup()
border.goto(-310, 291)
border.pendown()
border.width(2)
border.forward(622)
border.right(90)
border.forward(603)
border.right(90)
border.forward(623)
border.right(90)
border.forward(603)
border.right(90)
border.forward(10)
border.right(180)
border.forward(11)
border.ht()

#-----game functions-----

def go_up():
    if top.direction != "down":
        top.direction = "up"

def go_down():
    if top.direction != "up":
        top.direction = "down"

def go_left():
    if top.direction != "right":
        top.direction = "left"

def go_right():
    if top.direction != "left":
        top.direction = "right"

def move():
    if top.direction == "up":
        y = top.ycor()
        top.sety(y+20)
    if top.direction == "down":
        y = top.ycor()
        top.sety(y-20)
    if top.direction == "left":
        x = top.xcor()
        top.setx(x-20)
    if top.direction == "right":
        x = top.xcor()
        top.setx(x+20)

#-----events-----

setup.listen()
setup.onkeypress(go_up, "Up")
setup.onkeypress(go_down, "Down")
setup.onkeypress(go_left, "Left")
setup.onkeypress(go_right, "Right")

while True:
    setup.update()

    if top.xcor()>290 or top.xcor()<-290 or top.ycor()>260 or top.ycor()<-290: #TODO
        time.sleep(1)
        top.goto(0, 0)
        top.direction = "stop"

        for segment in segments:
            segment.goto(1000, 1000)
        segments.clear()

        current_score = 0000

        delay = 0.1

        scoreboard_score.clear()
        scoreboard_score.write("Score: {}".format(current_score, high_score), align="left", font=("digital-7", 24, "normal"))

        scoreboard_highscore.clear()
        scoreboard_highscore.write("High Score: {}".format(current_score, high_score), align="right", font=("digital-7", 24, "normal"))

    if top.distance(blocks) <20:
        x = random.randint(-290, 270)
        y = random.randint(-290, 270)
        blocks.goto(x, y)

        new_segment = trtl.Turtle()
        new_segment.speed(0)
        new_segment.shape("square")
        new_segment.color("gray")
        new_segment.penup()
        segments.append(new_segment)

        delay -= 0.001
        current_score += 10

        if current_score > high_score:
            high_score = current_score
        scoreboard_score.clear()
        scoreboard_score.write("Score: {}".format(current_score, high_score), align="left", font=("digital-7", 24, "normal"))

        scoreboard_highscore.clear()
        scoreboard_highscore.write("High Score: {}".format(current_score, high_score), align="right", font=("digital-7", 24, "normal"))

    for index in range(len(segments)-1, 0, -1):
        x = segments[index-1].xcor()
        y = segments[index-1].ycor()
        segments[index].goto(x, y)
    if len(segments)>0:
        x = top.xcor()
        y = top.ycor()
        segments[0].goto(x, y)

    move()

    for segment in segments:
        if segment.distance(top)<20:
            time.sleep(1)
            top.goto(0, 0)
            top.direction = "stop"

            for segment in segments:
                segment.goto(1000, 1000)
            segments.clear()
            current_score = 0000
            delay = 0.1
    
            scoreboard_score.clear()
            scoreboard_score.write("Score: {}".format(current_score, high_score), align="left", font=("digital-7", 24, "normal"))

            scoreboard_highscore.clear()
            scoreboard_highscore.write("High Score: {}".format(current_score, high_score), align="right", font=("digital-7", 24, "normal"))
    time.sleep(delay)
setup.mainloop()

每次在代码中都是这两行导致问题:

scoreboard_score.write("Score: {}".format(current_score, high_score), align="left", font=("digital-7", 24, "normal"))

scoreboard_highscore.write("High Score: {}".format(current_score, high_score), align="right", font=("digital-7", 24, "normal"))

我正在尝试用旧的诺基亚手机制作贪吃蛇游戏。虽然这个错误不会破坏代码(或者至少我认为),但它会不断弹出。

非常感谢所有帮助!

如果你想同时显示current_score和high_score,你应该这样写:

"Score: {} {}".format(current_score, high_score)

而不是:

"Score: {}".format(current_score, high_score)

只需要一个参数。

尝试删除您在以下行中提供的两个参数之一:

scoreboard_score.write("Score: {}".format(current_score, high_score), align="left", font=("digital-7", 24, "normal"))

并改用这样的:

scoreboard_score.write("Score: {}".format(current_score), align="left", font=("digital-7", 24, "normal"))