Есть ли какой-либо способ увеличить счетчик в пределах однострочной инструкции if?

#python #python-3.x

#python #python-3.x

Вопрос:

Я создал эту простую функцию:

 def alpha_1(x):
    #num = 5
    counter = 65
    out = []
    for i in range(len(x)):
        if x.isalpha():
            num = ord(x[i])
            out.append(chr(num 1 if 65 <= num <= 89 or 97 <= num <= 121 else counter))
        else:
            print("Not a character!")
            return 0
    return "".join(out)
  

Здесь мне нужно увеличить счетчик, когда некоторые значения достигают однострочной инструкции if как count =5 , чтобы я не получал тот же ‘A’ для значений, которые не попадают под указанный диапазон. Я знаю, что этого можно достичь, используя обычные инструкции «if».

Я просто хочу знать, есть ли какой-либо способ достичь этого в однострочных операторах?

Комментарии:

1. Вы спрашиваете, как увеличить переменную в инструкции if?

2. пожалуйста, сформулируйте свой вопрос, но если вы ищете сокращение if -> x = 10 if a > b else 11

3. Просто используйте полный оператор if , не используйте условное выражение, оно целенаправленно ограничено в том, что вы можете делать. Вы должны поддерживать читаемость условных выражений и отсутствие побочных эффектов

4. да, я использую полное «if», просто было любопытно узнать, можно ли этого достичь таким образом, Np .. спасибо всем!!

Ответ №1:

 counter  = 5 if statement else 0
  

вы имеете в виду что-то вроде этого?

это добавит 5 к счетчику, если оператор true , и добавит 0 к счетчику, если оператор false

Комментарии:

1. Я устал от этого, но его ошибка в виде: out.append(chr(num 1 counter = 5 if 65 <= num <= 89 or 97 <= num <= 121 else counter)) SyntaxError: invalid syntax

2. какую версию python вы используете?

Ответ №2:

Целые числа в python неизменяемы, что означает, что единственный способ изменить значение, на которое указывает какая-либо переменная, подобная вашей counter , — это повторно присвоить ее.

 counter = 5 
counter = counter   5  # tadaa!
  

Обойти это невозможно, и присваивания являются операторами, что означает, что вы не можете использовать их в качестве значения для чего-либо (например, if инструкции).

Вы не сможете выполнить однострочную инструкцию if и изменить значение, пока не появится Python 3.8, когда выделенное выражение присваивания станет частью языка, который позволит именно то, что вы хотите:

 if (counter := (counter   5)) > something_else:
    # do something, also counter is now 5 bigger than before
  

Но если вы не хотите создавать текущий мастер cpython локально, вам придется подождать до 21.10.2019, чтобы начать его использовать.