Решение на Навигация на Piet от Петър Тодоров

Обратно към всички решения

Към профила на Петър Тодоров

Резултати

  • 10 точки от тестове
  • 0 бонус точки
  • 10 точки общо
  • 8 успешни тест(а)
  • 0 неуспешни тест(а)

Код

light_green = "C0FFC0"
dark_green = "00C000"
light_yellow = "FFFFC0"
dark_yellow = "C0C000"
light_red = "FFC0C0"
dark_red = "C00000"
light_blue = "C0C0FF"
dark_blue = "0000C0"
white = "FFFFFF"
black = "000000"
def calculate_final_vector(coords, moves):
x1 = coords[0]
y1 = coords[1]
moves = [move.upper() for move in moves]
for move in moves:
if move == light_green or move == dark_red:
x1 -= 1
elif move == light_red or move == dark_green:
x1 += 1
elif move == light_yellow or move == dark_blue:
y1 -= 1
elif move == dark_yellow or move == light_blue:
y1 += 1
elif move == white:
continue
elif move == black:
break
else:
print("Invalid colour code.")

По принцип тук би следвали да хвърлим Exception. Това не сме го коментирали още, така че и print става. Ако ще връщаш стойност, обаче, нека да е None. -1 няма никакво специално значение в Python, освен, че за разлика от простосмъртните езици, е индексът на последния елемент от list ;)

return None
return x1, y1

Лог от изпълнението

........
----------------------------------------------------------------------
Ran 8 tests in 0.077s

OK

История (2 версии и 4 коментара)

Петър обнови решението на 18.10.2022 23:45 (преди около 2 години)

+darkGreen = "00C000"
+lightYellow = "FFFFC0"
+darkYellow = "C0C000"
+lightRed = "FFC0C0"
+darkRed = "C00000"
+lightBlue = "C0C0FF"
+darkBlue = "0000C0"
+white = "FFFFFF"
+black = "000000"
+
+
+def calculate_final_vector(x1, y1, moves):
+ for move in moves:
+ move = move.upper()

Не бих посъветвал да презаписваш променливата, която използваш като референция на текущата итерация от цикъла. Да, в конкретния случай това не е никакъв проблем, но ако създадеш навика да не го правиш, би могъл да си спестиш неприятности в по-сложен код. Ако преправяш вече съществуващ код, би било удобно да погледнеш само ред 4 и веднага да знаеш какво представлява color. Презаписвайки стойността му, вече не знаеш и получаваш неочаквани резултати.

Hint: Можеш да се справиш с този проблем, ако обходиш списък със стойности, които вече са upper(). Днес разгледахме няколко варианта за прилагане на една и съща операция върху всеки елемент от дадена колекция.

+ if move == lightGreen or move == darkRed:
+ x1 -= 1
+ elif move == lightRed or move == darkGreen:
+ x1 += 1
+ elif move == lightYellow or move == darkBlue:
+ y1 -= 1
+ elif move == darkYellow or move == lightBlue:
+ y1 += 1
+ elif move == white:
+ continue
+ elif move == black:
+ break
+ else:
+ print("Invalid colour code.")

По принцип тук би следвали да хвърлим Exception. Това не сме го коментирали още, така че и print става. Ако ще връщаш стойност, обаче, нека да е None. -1 няма никакво специално значение в Python, освен, че за разлика от простосмъртните езици, е индексът на последния елемент от list ;)

+ return -1
+ return [x1, y1]
+
+

Петър обнови решението на 23.10.2022 11:27 (преди около 2 години)

-lightGreen = "C0FFC0"
-darkGreen = "00C000"
-lightYellow = "FFFFC0"
-darkYellow = "C0C000"
-lightRed = "FFC0C0"
-darkRed = "C00000"
-lightBlue = "C0C0FF"
-darkBlue = "0000C0"
+light_green = "C0FFC0"
+dark_green = "00C000"
+light_yellow = "FFFFC0"
+dark_yellow = "C0C000"
+light_red = "FFC0C0"
+dark_red = "C00000"
+light_blue = "C0C0FF"
+dark_blue = "0000C0"
white = "FFFFFF"
black = "000000"
-def calculate_final_vector(x1, y1, moves):
+def calculate_final_vector(coords, moves):
+ x1 = coords[0]
+ y1 = coords[1]
+ moves = [move.upper() for move in moves]
for move in moves:
- move = move.upper()
- if move == lightGreen or move == darkRed:
+ if move == light_green or move == dark_red:
x1 -= 1
- elif move == lightRed or move == darkGreen:
+ elif move == light_red or move == dark_green:
x1 += 1
- elif move == lightYellow or move == darkBlue:
+ elif move == light_yellow or move == dark_blue:
y1 -= 1
- elif move == darkYellow or move == lightBlue:
+ elif move == dark_yellow or move == light_blue:
y1 += 1
elif move == white:
continue
elif move == black:
break
else:
print("Invalid colour code.")
- return -1
- return [x1, y1]
+ return None
-
+ return x1, y1
-