Есть ли способ игнорировать вызываемую переменную в составной строке? - PullRequest
1 голос
/ 14 июля 2020

Я пишу код, который отправляет письмо от 1 до 4 получателей. Получатели извлекаются из книги Excel. Таким образом, если получателей всего 3, ячейка для Person4 будет пустой. Проблема в том, что Pythoni c не очень похоже на то, чтобы писать код для отдельного электронного письма для каждого случая, когда количество получателей разное. Я хотел бы написать один блок кода для одного электронного письма и игнорировать вызываемую переменную, если она отсутствует

# collect recipent names from workbook
Person1 = sheet['BG1'].value
Person2 = sheet['BH1'].value
Person3 = sheet['BI1'].value
Person4 = sheet['BJ1'].value

# draft email
if Person4 != None:
     print('Dear ' + Person1 + ', ' + Person2 + ', ' + Person3 + ', and ' + Person4 + ',\n' + 
     'The faculty members of ... *continued body of email*')

elif Person3 != None:
     print('Dear ' + Person1 + ', ' + Person2 + ', and ' + Person3 + ',\n' + 
     'The faculty members of ... *continued body of email*')

elif Person2 != None:
     print('Dear ' + Person1 + ', and ' + Person2 + ',\n' + 
     'The faculty members of ... *continued body of email*')

else:
     print('Dear ' + Person1 + ',\n' + 
     'The faculty members of ... *continued body of email*')

Есть ли более разумный способ написать это? Один блок кода на любое количество получателей?

1 Ответ

4 голосов
/ 14 июля 2020

Рассматривайте свои имена как массив:

names = ', '.join(people[:-1]) + ' and ' + people[-1] if len(people) > 1 else people[0]
print(f'Dear {names},\n')

Чтобы заполнить массив people, вы можете сделать

people = [person for person in (Person1, Person2, Person3, Person4) if person]

Вероятно, также есть способ сделать это напрямую с помощью Диапазон листов Excel без предварительного присвоения имен людей отдельным переменным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...