Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Invalid syntax. r = int(r, 3). Почему?

Виктория Шапалина Ученик (122), открыт 1 неделю назад
Почему инвалид??

def perevod(num, base):
newnum = ''
while num > 0:
newnum = str(num % base) + newnum
num //= base
return newnum
a = []
for n in range(1, 10000):
r = perevod(n, 3)
if (int(r.count('1') + r.count('2'))) % 4 == 0:
r = '1' + r + r[:-2]
else:
r = r + str((((int(r.count('1') + r.count('2'))) % 4) * 3)
r = int(r, 3)
if r > 353:
a.append(r)
print(min(a))
7 ответов
Dobribobik Профи (660) 1 неделю назад
Извините не могу помочь,умею только: print("Hello World!")
[ ] [ ] Мастер (1209) 1 неделю назад
Ну и код.. Попробуй r = int(str(r), 3)
Виктория ШапалинаУченик (122) 1 неделю назад
А зач мне делать строкой то, что уже является строкой
[ ] [ ] Мастер (1209) Виктория Шапалина, сек, сейчас проверю
[ ] [ ]Мастер (1209) 1 неделю назад
Chromatic Scale Искусственный Интеллект (208299) 1 неделю назад
Ошибка синтаксиса возникает из-за отсутствующей закрывающей скобки в строке внутри блока `else`. Давайте разберём ваш код подробнее и исправим ошибку.

### Проблема
В строке:

```python
r = r + str((((int(r.count('1') + r.count('2'))) % 4) * 3)
```

не хватает закрывающей скобки `)` для функции `str`. Из-за этого интерпретатор Python ожидает продолжения выражения, и следующая строка `r = int(r, 3)` воспринимается как часть предыдущей, что вызывает ошибку синтаксиса.

### Исправление
Добавьте недостающую закрывающую скобку `)` в конце строки:

```python
r = r + str((((int(r.count('1') + r.count('2'))) % 4) * 3))
```

### Полный исправленный код

Вот полный исправленный код с правильным количеством скобок и улучшенной читаемостью:

```python
def perevod(num, base):
newnum = ''
while num > 0:
newnum = str(num % base) + newnum
num //= base
return newnum

a = []

for n in range(1, 10000):
r = perevod(n, 3)
count = r.count('1') + r.count('2')
if count % 4 == 0:
r = '1' + r + r[:-2]
else:
r = r + str((count % 4) * 3) # Закрывающая скобка добавлена здесь
r = int(r, 3)
if r > 353:
a.append(r)

if a: # Проверка, что список не пустой
print(min(a))
else:
print("Нет чисел, удовлетворяющих условиям.")
```

### Дополнительные рекомендации

1. **Улучшение читаемости**: Вынесите вычисление количества `1` и `2` в отдельную переменную `count`, как показано в исправленном коде. Это делает код более понятным и избегает повторных вызовов методов `count`.

2. **Проверка списка `a`**: Перед вызовом `min(a)` стоит проверить, что список `a` не пустой, чтобы избежать ошибки `ValueError`.

3. **Избыточные приведения типов**: В вашем коде `int(r.count('1') + r.count('2'))` избыточно, так как `r.count('1') + r.count('2')` уже возвращает целое число. Можно просто использовать `count = r.count('1') + r.count('2')`.

### Заключение

После внесения исправлений ваш код должен работать без синтаксических ошибок. Если у вас возникнут дополнительные вопросы или проблемы, пожалуйста, дайте знать!
Виктория ШапалинаУченик (122) 1 неделю назад
Спс за старание, но там уже есть закрывающая скобка
Вертолётов 625 Мудрец (13315) 1 неделю назад
Код:
 def perevod(num, base): 
newnum = ''
while num > 0:
# Получаем остаток от деления числа на основание системы счисления и добавляем его в начало строки
newnum = str(num % base) + newnum
# Делим число на основание системы счисления, используя целочисленное деление
num //= base
return newnum

a = []
for n in range(1, 10000):
# Преобразуем число n в строку в системе счисления с основанием 3
r = perevod(n, 3)
# Считаем количество символов '1' и '2' в строке
count_ones_twos = r.count('1') + r.count('2')
# Находим остаток от деления количества символов '1' и '2' на 4
remainder = count_ones_twos % 4

if remainder == 0:
# Если остаток равен нулю, добавляем символ '1' в начало строки
# и удаляем два последних символа строки
# Проверяем, что длина строки достаточна для удаления двух символов
if len(r) > 2:
r = '1' + r[:-2]
else:
continue # Пропускаем эту итерацию цикла, если строка слишком короткая
else:
# В противном случае добавляем к строке символ, соответствующий остатку
r += str(remainder)

try:
# Преобразуем строку в число с основанием 3
r = int(r, 3)
# Если получившееся число больше 353, добавляем его в список a
if r > 353:
a.append(r)
except ValueError:
continue # Пропускаем эту итерацию цикла, если строка содержит недопустимые символы

# Если список a не пустой, выводим минимальное число из списка
if a:
print(min(a))
else:
print("Нет подходящих чисел")
Лайт Ягами Искусственный Интеллект (310591) 1 неделю назад
Точно не напутал со скобками тут?
         r = r + str((((int(r.count('1') + r.count('2'))) % 4) * 3) 
Пересчитай, открывающих больше, чем закрывающих, должно быть поровну
GGG Просветленный (37463) 1 неделю назад
 def perevod(num, base): 
newnum = ''
while num > 0:
newnum = str(num % base) + newnum
num //= base
return newnum

a = []
for n in range(1, 10000):
r = perevod(n, 3)
count = int(r.count('1') + r.count('2'))
if count % 4 == 0:
r = '1' + r + r[:-2]
else:
# Добавляем остаток от деления на 3 (0, 1 или 2)
r = r + str((count * 3) % 3) # Теперь добавляем только 0, 1 или 2
r = int(r, 3)
if r > 353:
a.append(r)
print(min(a))
Похожие вопросы