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 6 Точки

Здравей,

Пускам ти моето решение 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 0 Точки

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

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

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

Успех!

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

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

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

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

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

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.