Софтуерно Инженерство
Loading...
+ Нов въпрос
ralicaterzieva avatar ralicaterzieva 1 Точки

Man on War - само 80 процента #Python

Здравейте, 

вече от няколко дена пробвам да реша и дебъгна тази задача, но нещо не достига явно.

От джъдж не мога да видя нищо. 

Ето и самия код:

status_pirate_ship = [int(x) for x in input().split(">")]

status_warship = [int(x) for x in input().split(">")]

max_health_capacity = int(input())

 

stalemate = True

while True:

    command = input().split(" ")

    action = command[0]

 

    if action == "Retire":

        break

 

    if action == "Fire":

        index = int(command[1])

        damage = int(command[2])

        if index >= 0 and index < len(status_warship):

            status_warship[index] -= damage

 

            if status_warship[index] <= 0:

                print("You won! The enemy ship has sunken.")

                stalemate = False

                break

 

    if action == "Defend":

        start_index = int(command[1])

        end_index = int(command[2])

        damage = int(command[3])

        if start_index >= 0 and start_index < len(status_pirate_ship) and end_index >= 0 and end_index < len(status_pirate_ship):

            ship_broken = False

            for index in range(start_index, end_index + 1):

                status_pirate_ship[index] -= damage

 

                if status_pirate_ship[index] <= 0:

                    ship_broken = True

                    break

 

            if ship_broken:        

                print("You lost! The pirate ship has sunken.")

                stalemate = False

                break

 

    if action == "Repair":

        index = int(command[1])

        health = int(command[2])

 

        if index >= 0 and index < len(status_pirate_ship):

            if status_pirate_ship[index] + health <= max_health_capacity:

                status_pirate_ship[index] += health

 

    if action == "Status":

        need_repair = max_health_capacity * 0.2

        parts_pirate_ship = len([x for x in status_pirate_ship if x < need_repair])

        print(f"{parts_pirate_ship} sections need repair.")

 

if stalemate:

    sum_pirate_ship = sum(status_pirate_ship)

    sum_warship = sum(status_warship)

    print(f"Pirate ship status: {sum_pirate_ship}")

    print(f"Warship status: {sum_warship}")

 

Тагове:
0
Programming Fundamentals
Chyna avatar Chyna 7 Точки

Здравей,

Пускам ти моето решение https://pastebin.com/umDPRE1P

Не съм ти тествала кода, че нямам време в момента, но виждам, че на Repair командата ти липсва действие в случай, че index + health > max_health , не добавяш health към индекса, a трябва, и по-точно да добавиш толкова, че да не надвърля max health.

Аз съм направила само тази проверка, за да сетна health на колкото ми трябва, и ако не влезе в нея, просто си добавям health към съответния индекс. 

  1. elif tokens[0] == 'Repair':

  2.         idx = int(tokens[1])

  3.         health = int(tokens[2])

  4.         if idx >= 0 and idx < len(pirate_ship):

  5.             if pirate_ship[idx] + health > max_health:

  6.                 health = max_health - pirate_ship[idx]

  7.             pirate_ship[idx] += health

Дано да ти е помогнал кода :) Успех на изпита ! 

0
ralicaterzieva avatar ralicaterzieva 1 Точки

Супер си! Благодаря ти! Ще го погледна сега. :)

0
MelSea avatar MelSea 4 Точки

Ралица, успя ли? Чудя се, защо навсякъде индентацията ти не е 4 спейса?

Когато надвишава max_health, грешката ти е, че не прибавяш нищо, а то трябва да стане = max_health, просто не трябва да надвишава.

Ето и моя код: https://pastebin.com/7nwd3tya

Успех!

0
27/02/2020 23:50:50
ralicaterzieva avatar ralicaterzieva 1 Точки

Да, успях. Колежката беше видяла какво съм пропуснала с условията с health ситуацията. 

Просто грешно се е пестнал кода ми. 

Индентацията си е добре, иначе няма как да мине 80 процента. :)

Благодаря все пак! 

0