【问题标题】:can't multiply sequence by non-int of type 'float' error with tkinter Entrytkinter Entry 无法将序列乘以非整数类型的“浮点”错误
【发布时间】:2017-06-02 17:56:09
【问题描述】:

我正在创建一个游戏:Canon-man。你必须触摸一个目标,指定角度和速度。游戏分为三个阶段:

1- 您选择“播放”、“选项”或“退出”

2- 你选择难度“简单”、“中等”或“困难”

3- 游戏出现,您可以选择参数。

我的游戏分为两个类,第一个(Canon)处理第一和第二阶段,第二个(Man)处理第三阶段。

我可以进入前两个阶段,但是当我点击“简单”“中等”或“困难”时 我收到此错误:

" 不能将序列乘以 'float' 类型的非整数"

第三个窗口如下所示(Tkinter 的条目不在此处):

third window

这是我班的人(其中的一部分):

def base(self):

    self.height_c = 300
    self.width_c = 700

    self.choix = 0
    self.lang = 0

    self.flag = 0
    bool(self.flag)

    self.t = 0
    self.x = 130
    self.y = 225

    self.root = Tk()
    self.root.title("ShotDown")
    self.can = Canvas(self.root, width=self.width_c, height=self.height_c)
    self.can.grid(row=0, column=4, rowspan=4)

    self.cible = PhotoImage(file="\image\\cible.png")
    self.canon = PhotoImage(file="\image\\canon.png")
    self.canontete = PhotoImage(file="\image\\canontete.png")
    self.photo = PhotoImage(file="\image\\paysage_700.png")
    self.hc45 = PhotoImage(file="\image\hc45.png")
    self.Play = PhotoImage(file="\image\\Play.gif")

    self.angle = Entry(self.root, textvariable="hey")

    # initialisation:
    #

    # choix du fond

    if self.lang == "0000":

        self.photo = PhotoImage(file="\image\\paysage_700.png")

    elif self.lang == "0001":

        self.photo = PhotoImage(file="\image\\mer.png")

    elif self.lang == "0010":

        self.photo = PhotoImage(file="\image\\interstellar.png")

    self.y_cible = random.randint(60, 240)

    self.can.create_image(0, 0, anchor=NW, image=self.photo)
    self.image = self.can.create_image(-50, -50, image=self.hc45)

    # Creation des differents boutons
    #
    bou1 = Button(self.root, text='Quitter', width=8, command=self.root.quit)
    bou1.grid(row=0, column=2)

    bou2 = Button(self.root, text='Demarrer', width=8, command=Man.start_it(self))
    bou2.grid(row=0, column=3)

    bou3 = Button(self.root, text='Arreter', width=8, command=Man.stop_it)
    # bou3.grid(row=2, column=1)

    New_angle = StringVar()
    New_angle.set("Saisir Nouvel Angle")
    text_angle = Label(self.root, text="Angle :")
    text_angle.grid(row=1, column=2)
    self.angle = Entry(self.root, textvariable=New_angle)
    self.angle.grid(row=1, column=3)

    New_vitesse = StringVar()
    New_vitesse.set("Saisir Nouvelle Vitesse")
    text_vitesse = Label(self.root, text="Vitesse :")
    self.in_vitesse = Entry(self.root, textvariable=New_vitesse)
    text_vitesse.grid(row=2, column=2)
    self.in_vitesse.grid(row=2, column=3)

    bou_tir = Button(self.root, text='Tirer', width=8, command=Man.start_it(self))
    bou_tir.grid(row=0, column=3)

    if self.flag == 0:

        self.base = self.can.create_image(50, 260, image=self.canontete)
        self.can.create_image(self.width_c - 50, self.y_cible, image=self.cible)

    # demarrage de la boucle principale
    #

    self.root.mainloop()

如果有不明白的地方,尽管问^^。

谢谢。

编辑:

@calico_ " - 没有看到你所有的代码 "。抱歉,我没有显示错误在哪里:

     self.can.update()
            b = float(self.angle.get() * pi / 180)
            Vo = float(self.in_vitesse.get())
            self.t += 0.025
            self.x += (Vo * cos(b) * self.t)
            self.y -= ((-0.5 * 9.81 * (self.t ** 2)) + (Vo * sin(b) * self.t))
            print(self.x, self.y)

【问题讨论】:

  • 该代码中有几个地方将两个变量相乘,您知道是哪一行导致了异常吗?例如,如果self.angle.get() 返回一个序列(可能是无意的),则不能将其乘以pi,因为pi 可能是float

标签: python-3.x class tkinter


【解决方案1】:

如果没有看到您的所有代码或完整的异常,很难准确地告诉您哪里出了问题。但是,这里是对错误的解释以及您看到它的可能原因:

序列可以在 Python 中相乘。这里我们创建一个列表(一种序列),然后将其乘以 3:

>>> x = [1,2,3]
>>> y = x*3

结果不是每个项目的乘积。相反,它是原始序列的三倍:

>>> y
[1, 2, 3, 1, 2, 3, 1, 2, 3]

另一个难题 - 当您将两个数字相除时,结果值通常是浮点数,而不是整数:

>>> x = 6/3
>>> type(x)
<class 'float'>

而你不能将一个序列乘以一个浮点数,只能乘以一个整数。正是异常所说的......

因此,请在代码中查找将序列相乘的部分。完整的 Traceback 将帮助您找到导致错误的行。只是猜测,但您可能想要的是列表理解:

>>> y = [val*3 for val in x]
>>> y
[3, 6, 9]

【讨论】:

    猜你喜欢
    • 2021-05-29
    • 2018-05-13
    • 2011-04-06
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    相关资源
    最近更新 更多