Давайте разберемся с вашими двумя вопросами.
### 1. Проблема с точностью
Проблема с выводом `30.00000000000007` вместо `30` связана с особенностями представления чисел с плавающей точкой в Python (и в большинстве языков программирования). Это нормально, когда дробные числа не могут быть точно представлены в двоичной системе и возникают небольшие ошибки округления.
Чтобы исправить этот вывод и отобразить результат в более привычном формате, вы можете использовать форматирование строк. Например, можно применить `round()` или форматирование с помощью f-строк. Вот как это можно сделать:
```python
a, b, n = int(input()), int(input()), int(input())
rub = (a * n) + (b * n) // 100
kop = (a * n) + (b * n) / 100
kop1 = kop - rub
kop2 = kop1 * 100
# Форматируем вывод
print(rub, round(kop2))
```
Или с помощью f-строк:
```python
print(rub, f"{kop2:.0f}")
```
### 2. Ошибка "invalid syntax"
Наиболее вероятная причина ошибки синтаксиса в вашей второй версии кода — использование оператора `:=` (также известного как "моржовый оператор") в неправильном месте. Этот оператор предназначен для присваивания значения переменной во время выражения, но вы не можете использовать его в той конструкции, в которой вы написали. Вот исправленная версия вашего кода:
```python
a, b, n = int(input()), int(input()), int(input())
rub = (a * n) + (b * n) // 100
kop = (a * n) + (b * n) / 100
kop1 = kop - rub
kop2 = kop1 * 100
print(rub, round(kop2))
```
Если вы хотите использовать "моржовый оператор" для облегчения чтения кода, вам нужно переписать его правильно:
```python
a, b, n = int(input()), int(input()), int(input())
rub = (a * n) + (b * n) // 100
kop = (a * n) + (b * n) / 100
kop1 = (kop := kop - rub) # Используем моржовый оператор
kop2 = kop1 * 100
print(rub, round(kop2))
```
Теперь нет никаких синтаксических ошибок, и результат будет округленным до целого числа.
Попробуйте эти изменения, и вы должны увидеть ожидаемые результаты!