Python中的机器人类OOP
事情是这样的。所以我想创建机器人类,让机器人战斗。但我要知道,我在为奇怪的输出而挣扎,因为我所拥有的只是Python中的机器人类OOP,python,python-3.x,oop,Python,Python 3.x,Oop,事情是这样的。所以我想创建机器人类,让机器人战斗。但我要知道,我在为奇怪的输出而挣扎,因为我所拥有的只是 Robot E lost all the power Robot D lost all the power Robot C lost all the power Robot B lost all the power Robot A lost all the power 这是我的密码: from typing import List, Tuple class Robot: def
Robot E lost all the power
Robot D lost all the power
Robot C lost all the power
Robot B lost all the power
Robot A lost all the power
这是我的密码:
from typing import List, Tuple
class Robot:
def __init__(self, name: str, place : List[int], start: Tuple[int, int] = (0,0), power: int = 100):
self._name = name
self._place = place
self._start = start
self._power = power
# further assignments
@property
def name(self):
return self._name
@name.setter
def name(self, value):
if isinstance(value, str):
self._name = value
else:
raise TypeError("must be a string")
@property
def place(self):
return self._place
@place.setter
def place(self, value):
if isinstance(value, list):
self._start = value
else:
raise TypeErorr("must be a list")
@property
def start(self):
return self._start
@start.setter
def start(self, value):
if isinstance(value, tuple):
self._start = value
else:
raise TypeErorr("must be a tuple")
@property
def power(self):
return self._power
@power.setter
def power(self, value):
if isinstance(value, int):
self._start = value
else:
raise TypeErorr("must be a int")
@property
def check_power(self):
if self._power <= 0:
raise ValueError("No power")
def left(self, value):
self.sprawdz_power()
self.power -= value
if self.place[0] - value < 0:
self.place[0] = self.place[0] - value + 8
else:
self.place[0] = self.place[0] - value
def up(self, value):
self.sprawdz_power()
self.power -= value
if self.place[1] + value > 7:
self.place[1] = self.place[1] + value - 8
else:
self.place[1] = self.place[1] + value
if self.place[1] == 5:
self.power += 2
#def right(self, value):
#def down(self, value):
def __str__(self):
return "{} {} {}".format(self._name, self._place, self._power)
robots = [
Robot(name = "A", place = [3,4], start = (0,0), power = 100),
Robot(name = "B", place = [1,2], start = (0,0), power = 100),
Robot(name = "C", place = [1,2], start = (0,0), power = 100),
Robot(name = "D", place = [1,2], start = (0,0), power = 100),
Robot(name = "E", place = [1,2], start = (0,0), power = 100),
]
def check_position():
to_delete = []
for r_a_nr in range(len(robots)):
for r_b_nr in range(r_a_nr,len(robots)):
if robots[r_a_nr].place() == robots[r_b_nr].place():
if robots[r_a_nr].power() > robots[r_b_nr].power():
robots[r_a_nr].power(robots[r_a_nr].get_power() + robots[r_b_nr].power())
to_delete.append(r_b_nr)
print(f'Robot {robots[r_b_nr].get_name()} has been slain by {robots[r_a_nr].name()}')
elif robots[r_a_nr].power() < robots[r_b_nr].power():
robots[r_b_nr].power(robots[r_b_nr].power() + robots[r_a_nr].power())
to_delete.append(r_a_nr)
print(f'Robot {robots[r_a_nr].name()} has been slain by {robots[r_b_nr].name()}')
for i in sorted(to_delete, reverse=True):
del robots[i]
def game(number):
for i in range(0, number):
from random import randint
if len(robots) == 1:
print(robots[0].name, "is vicotrius")
break
to_delete = []
for r_nr in range(len(robots)):
strona_rand = randint(0,1)
ruch_value = randint(0,4)
if strona_rand == 0:
try:
robots[r_nr].up(ruch_value)
except:
to_delete.append(r_nr)
elif strona_rand == 1:
try:
robots[r_nr].left(ruch_value)
except:
to_delete.append(r_nr)
for r_nr in sorted(to_delete, reverse=True):
print(f'Robot {robots[r_nr].name} lost all the power')
del robots[r_nr]
check_position()
game(100)
从键入导入列表、元组
职业机器人:
def(self,name:str,place:List[int],start:Tuple[int,int]=(0,0),power:int=100):
self.\u name=name
自我。_地点=地点
self.\u start=start
自功率=功率
#进一步的任务
@财产
def名称(自我):
返回self.\u name
@姓名设定器
def名称(自身、值):
如果isinstance(值,str):
self.\u name=value
其他:
raise TypeError(“必须是字符串”)
@财产
def位置(自我):
返回自己的位置
@定位符
定义位置(自身、值):
如果isinstance(值,列表):
self.\u start=值
其他:
raise TYPERORR(“必须是列表”)
@财产
def启动(自):
返回自我。\u开始
@启动设定器
def启动(自身、值):
如果isinstance(值、元组):
self.\u start=值
其他:
raise TYPERORR(“必须是元组”)
@财产
def电源(自):
恢复自我动力
@功率设定器
def功率(自身、数值):
如果isinstance(值,int):
self.\u start=值
其他:
raise TYPERORR(“必须是整型”)
@财产
def检查_电源(自):
如果是自功率7:
self.place[1]=self.place[1]+值-8
其他:
self.place[1]=self.place[1]+值
如果self.place[1]==5:
自功率+=2
#定义权限(自我、价值):
#def down(自身,值):
定义(自我):
返回“{}{}{}”。格式(self.\u名称、self.\u位置、self.\u电源)
机器人=[
机器人(name=“A”,位置=[3,4],启动=(0,0),功率=100),
机器人(name=“B”,位置=[1,2],启动=(0,0),功率=100),
机器人(name=“C”,位置=[1,2],启动=(0,0),功率=100),
机器人(name=“D”,位置=[1,2],启动=(0,0),功率=100),
机器人(name=“E”,位置=[1,2],启动=(0,0),功率=100),
]
def检查位置()
删除=[]
对于范围内的r_a_nr(透镜(机器人)):
对于范围内的r_b_nr(r_a_nr,len(机器人)):
如果机器人[r\u a\u nr].place()==机器人[r\u b\u nr].place():
如果机器人[r\u a\u nr].power()>机器人[r\u b\u nr].power():
机器人[r\u a\u nr].power(机器人[r\u a\u nr].get\u power()+机器人[r\u b\u nr].power())
to_delete.append(r_b_nr)
print(f'Robot{robots[r_b_nr].get_name()}已被{robots[r_a_nr].name()杀死)
elif robots[r_a_nr].power()
我将如何改进它?有什么想法吗?现在它似乎并不像我预期的那样有效。
逻辑是:
使用robot类-实现机器人战斗
每个玩家有5个机器人。人们交替地移动机器人,如果机器人在一个领域相遇,那么一个领域将获得另一个领域(或全部领域)的部分能量。当机器人的电源耗尽时,第二个机器人会自动出现
或者实施一场完全随机的战斗
我修复了这些错误:
- 打字错误
->typerorr
TypeError
- 未定义的函数
self.sprawdz\u power()
- 未定义的方法
get\u power()
- 电源是一个属性,不需要
来获取它instance.power()
- 使用
,您可以通过@property.setter
instance.property=value
- 检查位置中的错误,
如果机器人[r\u a\u nr]。电源>机器人[r\u b\u nr]。电源
然后
如果机器人[r\u a\u nr]。电源
。当robots[r\u a\u nr].power==robots[r\u b\u nr].power时,切勿输入任何代码块
- 检查位置中的错误,
可能会多次删除同一个机器人对于排序中的i(to\u delete,reverse=True)
@Daro1234451,如果我的回答有帮助,请接受。
from typing import List, Tuple
from random import randint
class Robot:
def __init__(self, name: str, place : List[int], start: Tuple[int, int] = (0,0), power: int = 100):
self._name = name
self._place = place
self._start = start
self._power = power
@property
def name(self):
return self._name
@name.setter
def name(self, value):
if isinstance(value, str):
self._name = value
else:
raise TypeError("must be a string")
@property
def place(self):
return self._place
@place.setter
def place(self, value):
if isinstance(value, list):
self._start = value
else:
raise TypeError("must be a list")
@property
def start(self):
return self._start
@start.setter
def start(self, value):
if isinstance(value, tuple):
self._start = value
else:
raise TypeError("must be a tuple")
@property
def power(self):
return self._power
@power.setter
def power(self, value):
if isinstance(value, int):
self._start = value
else:
raise TypeError("must be a int")
@property
def check_power(self):
if self._power <= 0:
raise ValueError("No power")
def left(self, value):
# self.sprawdz_power()
self.power -= value
if self.place[0] - value < 0:
self.place[0] = self.place[0] - value + 8
else:
self.place[0] = self.place[0] - value
def up(self, value):
# self.sprawdz_power()
self.power -= value
if self.place[1] + value > 7:
self.place[1] = self.place[1] + value - 8
else:
self.place[1] = self.place[1] + value
if self.place[1] == 5:
self.power += 2
def __str__(self):
return "{} {} {}".format(self._name, self._place, self._power)
def check_position():
to_delete = []
for r_a_nr in range(len(robots)):
for r_b_nr in range(r_a_nr+1,len(robots)):
if robots[r_a_nr].place == robots[r_b_nr].place:
if robots[r_a_nr].power >= robots[r_b_nr].power:
robots[r_a_nr].power = robots[r_a_nr].power + robots[r_b_nr].power
to_delete.append(r_b_nr)
print(f'Robot {robots[r_b_nr].name} has been slain by {robots[r_a_nr].name}')
elif robots[r_a_nr].power < robots[r_b_nr].power:
robots[r_b_nr].power = robots[r_b_nr].power + robots[r_a_nr].power
to_delete.append(r_a_nr)
print(f'Robot {robots[r_a_nr].name} has been slain by {robots[r_b_nr].name}')
for i in sorted(list(set(to_delete)), reverse=True):
del robots[i]
def game(number):
for _ in range(number):
if len(robots) == 1:
print(robots[0].name, "is vicotrius")
break
to_delete = []
for r_nr in range(len(robots)):
strona_rand = randint(0,1)
ruch_value = randint(0,4)
if strona_rand == 0:
try:
robots[r_nr].up(ruch_value)
except:
to_delete.append(r_nr)
elif strona_rand == 1:
try:
robots[r_nr].left(ruch_value)
except:
to_delete.append(r_nr)
for r_nr in sorted(to_delete, reverse=True):
print(f'Robot {robots[r_nr].name} lost all the power')
del robots[r_nr]
check_position()
robots = [
Robot(name = "A", place = [3,4], start = (0,0), power = 100),
Robot(name = "B", place = [1,2], start = (0,0), power = 100),
Robot(name = "C", place = [1,2], start = (0,0), power = 100),
Robot(name = "D", place = [1,2], start = (0,0), power = 100),
Robot(name = "E", place = [1,2], start = (0,0), power = 100),
]
game(100)
Robot E has been slain by C
Robot D has been slain by A
Robot C has been slain by B
Robot B has been slain by A
A is vicotrius