Top.Mail.Ru
Ответы

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

Почему инвалид??

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))

По дате
По рейтингу
Аватар пользователя
Профи

Извините не могу помочь,умею только: print("Hello World!")

Аватар пользователя
Мыслитель
1234567891011121314151617181920
 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)) 
Аватар пользователя
Гений

Точно не напутал со скобками тут?

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

Пересчитай, открывающих больше, чем закрывающих, должно быть поровну

Аватар пользователя
Ученик

Код:

123456789101112131415161718192021222324252627282930313233343536373839404142434445
 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("Нет подходящих чисел") 
 
Аватар пользователя
Мудрец

Ошибка синтаксиса возникает из-за отсутствующей закрывающей скобки в строке внутри блока `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')`.

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

После внесения исправлений ваш код должен работать без синтаксических ошибок. Если у вас возникнут дополнительные вопросы или проблемы, пожалуйста, дайте знать!

Аватар пользователя
Ученик

Спс за старание, но там уже есть закрывающая скобка

Аватар пользователя
Знаток

Ну и код.. Попробуй r = int(str(r), 3)

Аватар пользователя
Ученик

А зач мне делать строкой то, что уже является строкой

Аватар пользователя
Знаток
Аватар пользователя
Гуру

Ээээ сам такой



Видео по теме