Срочный вопрос программистам питон

urlxd

Новичок
Пользователь
Авг 1, 2021
2
0
1
Написал код и если заполнить вместо нулей целые числа то выдаёт ошибку я не знаю где сделать глобальную переменную:

from tkinter import *
import random as r

#atk warrior
number_warrior = 1
name_text_warrior = "имя", number_warrior, "воина:"
atk_text_warrior = "сила", number_warrior, "воина:"
def_text_warrior = "защита", number_warrior, "воина:"
hp_text_warrior = "жизнь", number_warrior, "воина:"

w = Tk()

atk1 = IntVar()
atk2 = IntVar()

def1 = IntVar()
def2 = IntVar()

hp1 = IntVar()
hp2 = IntVar()

armi = Label(w, text="атакующая армия :", font="arial 14")
armi.pack(anchor="nw", )

text_name_warrior = Label(text=name_text_warrior)
text_name_warrior.pack(anchor="nw")

name_warrior = Entry(bd=6)
name_warrior.pack(anchor="nw")

text_atk_warrior = Label(text=atk_text_warrior )
text_atk_warrior.pack(anchor="nw")

atk_warrior = Entry(bd=6, textvariable=atk1)
atk_warrior.pack(anchor="nw", )

text_def_warrior = Label(text=def_text_warrior)
text_def_warrior.pack(anchor="nw")

def_warrior = Entry(bd=6, textvariable=def1)
def_warrior.pack(anchor="nw", )

text_hp_warrior = Label(text=hp_text_warrior)
text_hp_warrior.pack(anchor="nw")

hp_warrior = Entry(bd=6, textvariable=hp1)
hp_warrior.pack(anchor="nw", )

#def warrior
number_warrior1 = 1
name_text_warrior1 = "имя", number_warrior1, "воина:"
atk_text_warrior1 = "сила", number_warrior1, "воина:"
def_text_warrior1 = "защита", number_warrior1, "воина:"
hp_text_warrior1 = "жизнь", number_warrior1, "воина:"

armi1 = Label(w, text="защищающая армия :", font="arial 14")
armi1.pack(anchor="nw", )

text_name_warrior1 = Label(text=name_text_warrior1)
text_name_warrior1.pack(anchor="nw")

name_warrior1 = Entry(bd=6)
name_warrior1.pack(anchor="nw")

text_atk_warrior1 = Label(text=atk_text_warrior1)
text_atk_warrior1.pack(anchor="nw")

atk_warrior1 = Entry(bd=6, textvariable=atk2)
atk_warrior1.pack(anchor="nw")

text_def_warrior1 = Label(text=def_text_warrior1)
text_def_warrior1.pack(anchor="nw")

def_warrior1 = Entry(bd=6,textvariable=def2 )
def_warrior1.pack(anchor="nw")

text_hp_warrior1 = Label(text=hp_text_warrior1)
text_hp_warrior1.pack(anchor="nw")

hp_warrior1 = Entry(bd=6, textvariable=hp2)
hp_warrior1.pack(anchor="nw")

war1 = 0
war2 = 0

def count():
if (atk1.get() > def2.get()):
war1 = (def2.get() * 50 / atk1.get() - 100)
war1 = war1 ** 2
war1 = war1 ** 0.5
else:
war1 = (atk1.get() * 50 / def2.get())

if (atk2.get() >= def1.get()):
war2 = (def1.get() * 50 / atk2.get() - 100)
war2 = war2 ** 2
war2 = war2 ** 0.5
else:
war2 = (atk2.get() * 50 / def1.get())

stop1 = True
war()

hp1 = hp1
hp2 = hp2

def war():
stop1 = True
while stop1:
randwar1 = r.uniform(0,100)
randwar2 = r.uniform(0,100)
if war1 < randwar1:
hp2 = (hp2.get() - 1)
if war2 < randwar2:
hp1 = (hp1.get() - 1)
if (hp2.get() <= 0):
stop1 = False
if (hp1.get() <= 0):
stop1 = False

let = Button(text="подсчитать", command=count)
let.pack()

w.mainloop()
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 581
457
83
вставьте код нормально, подробности тут как задать вопрос
 

notVasya

Новичок
Пользователь
Июл 9, 2021
3
0
1
Оформление топика конечно ппц :rolleyes: . Думал глаза сломаю пока вникал в суть вопроса ))
Из того что понял :
Скорее всего под этим
если заполнить вместо нулей целые числа то выдаёт ошибк
ты имел ввиду что код у тебя падает с ошибкой "UnboundLocalError: local variable 'referenced before assignment"
Это по тому что у тебя в функции def war(): Используется глобальная переменная hp1 , hp2. Которые ты пытаешься вызвать как локальные . Исправить просто . Нужно объявить глобальные переменные в функции
def war():
global hp1, hp2

Только это всё равно не поможет программе до конца заработать ) )
У тебя там ещё и ошибка :
"war2 = (def1.get() * 50 / atk2.get() - 100)
ZeroDivisionError: division by zero"
потом вылезет и то что "unsupported operand type(s) for -: 'IntVar' and 'int'"
И ещё вроде чё то ,дальше лень смотреть стало ))
 

urlxd

Новичок
Пользователь
Авг 1, 2021
2
0
1
Оформление топика конечно ппц :rolleyes: . Думал глаза сломаю пока вникал в суть вопроса ))
Из того что понял :
Скорее всего под этим ты имел ввиду что код у тебя падает с ошибкой "UnboundLocalError: local variable 'referenced before assignment"
Это по тому что у тебя в функции def war(): Используется глобальная переменная hp1 , hp2. Которые ты пытаешься вызвать как локальные . Исправить просто . Нужно объявить глобальные переменные в функции
def war():
global hp1, hp2

Только это всё равно не поможет программе до конца заработать ) )
У тебя там ещё и ошибка :
"war2 = (def1.get() * 50 / atk2.get() - 100)
ZeroDivisionError: division by zero"
потом вылезет и то что "unsupported operand type(s) for -: 'IntVar' and 'int'"
И ещё вроде чё то ,дальше лень смотреть стало ))
Я код починил но он просто останавливаться
 

notVasya

Новичок
Пользователь
Июл 9, 2021
3
0
1
Я код починил но он просто останавливаться
Ну он "просто" не может останавливаться . У тебя есть traceback в редакторе ну или где ты там пишешь. Вот и смотри трассировку , последняя строка и есть тип ошибки. А предыдущие из за чего она возникла . Можно её загуглить как правило в инете масса информации по любой . Ну или скинуть сюда , а то так совсем не понятно , мы ж всё таки не эктрасенсы ))
 

Форум IT Специалистов