функция не возвращает правильное значение

99
12

У меня проблема с функцией и возврат правильного значения. Функция возвращает путь к файлу в зависимости от выбора пользователя. Я проверил выбор ввода, но независимо от того, какой выбор я ввожу, возвращается только одно значение.

def pick_sql_version():  # might be redundant
sql_year = ['2008', '2014', '2016']
for i, val in enumerate(sql_year):
print(i + 1, " SQL Server Management Studio ", val)

sql_version = input("Pick the SSMS version: ")

# depending on the sql version path might vary
if sql_version == 1: # SSMS 2008
path = '' # which value to use?
elif sql_version == 2: # SSMS 2014
print (sql_version)
path = '"C:/Program Files (x86)/Microsoft SQL Server/120/Tools/Binn/ManagementStudio/Ssms.exe"'
print (path)
else: # SSMS 2016
print(sql_version)
path = '"C:/Program Files (x86)/Microsoft SQL Server/130/Tools/Binn/ManagementStudio/Ssms.exe"'
print(path)

return path

спросил(а) 2021-01-25T12:35:11+03:00 4 месяца, 3 недели назад
1
Решение
88

с input("Pick the SSMS version: ") вы читаете свой ввод как строки, это означает, что если вы введете 1, вы получите '1' и если вы введете 2 вы получите '2'.

Вы должны решить проблему, проверяя, есть ли ваш ввод '1' или '2' (вы также можете преобразовать свой ввод в int, как это предложено в некоторых комментариях, но я думаю, что это создаст вам только проблемы: например, это будет вызывать ошибку, если вы вводите то, что не может быть преобразовано в int):

if sql_version == '1':  # SSMS 2008
path = '' # which value to use?
elif sql_version == '2': # SSMS 2014
print (sql_version)

ответил(а) 2021-01-25T12:35:11+03:00 4 месяца, 3 недели назад
77

Не могу не написать другую версию для вас. Используя мощь dictionaries вы можете сделать свой код намного читабельнее.

Соедините ключ "1" со значением "120" и ключом "2" со значением "130". Мы используем их для вставки в путь с помощью str.format().

Наконец, используя dictionary.get() мы можем передать значение по умолчанию, и если вход пользователя недействителен (не 1 или 2), он будет использовать значение 120.

def pick_sql_version():  # might be redundant

# create an easy list to pick from
sql_year = ['2008', '2014', '2016']
for i, val in enumerate(sql_year, start= 1):
print("{} SQL Server Management Studio {}".format(i, val))
sql_version = input("Pick the SSMS version: ")

# depending on the sql version path might vary
version_d = {
'1': '120',
'2': '130'
}

# If invalid path is chosen fall back to default (120)
t='C:/Program Files (x86)/Microsoft SQL Server/{}/Tools/Binn/ManagementStudio/Ssms.exe'
path = t.format(version_d.get(sql_version, '120'))

return path

ответил(а) 2021-01-25T12:35:11+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема