2017-06-02 46 views
0

我正在創建一個遊戲:canon-man。您必須觸摸目標,指定角度和速度。這場比賽是在3個相分離:不能通過tkinter類型的'float'錯誤的非int類型乘以序列條目

1 - 您可以選擇「玩」,「選項」或「退出」

2-您選擇難度「易」,「中等」或「硬」

3-遊戲出現,您可以選擇參數。

我的遊戲分爲兩類,第一類(佳能)處理第一和第二階段,第二階段(曼)處理第三階段。

我可以訪問前兩個階段,但是當我點擊「易」,「中等」或「硬」 我得到這個錯誤:

「不能按類型的非INT「浮動繁衍序列'「

和第三窗口出現類似這樣(的Tkinter的entrys被不在這裏):

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) 
+0

該代碼中有幾個地方,你乘以兩個變量,你知道哪個特定的行導致異常?例如,如果'self.angle.get()'返回一個序列(可能是無意的),你不能用'pi'來乘它,因爲'pi'可能是'float'。 –

回答

2

沒有看到所有的代碼,或完整例外,它是很難確切地告訴你什麼是錯。但是,下面是對錯誤的解釋以及您可能看到它的原因:

序列可以在Python中相乘。在這裏,我們創建一個列表(一類型的序列),然後乘以3是:

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

結果不是由係數每個項目的產品。相反,它是原始序列三次:

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

另一塊拼圖 - 當你把兩個數,所得到的值通常是一個浮動,而不是一個int:

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

不能乘以一個浮點數的序列,只有一個整數。究竟是什麼例外說..

所以,尋找你的代碼的一部分,你在乘序列。完整的Traceback將幫助您查找導致錯誤的行。只是猜測,但你可能想要的是列表理解:

>>> y = [val*3 for val in x] 
>>> y 
[3, 6, 9] 
相關問題