Как я могу сделать эту конструкцию более простой, как с классами или функциями в python? - PullRequest
1 голос
/ 17 февраля 2020
print(
    "1. Engine block \n"
    "2. Pistons \n"
    "3. Crankshaft \n"
    "4. Camshaft \n"
    "5. Cylinder head \n"
    "6. Connecting Rod \n"
)

part = int(input("Choose an engine part to show you details about it: "))

if part == 1:
    print("Engine block")
elif part == 2:
    print("Pistons")
elif part == 3:
    print("Crankshaft")

У меня есть 26 таких утверждений, и мне интересно, могу ли я упростить это с помощью классов,
функций, списков или чего-то, что я не могу найти? ??

Ответы [ 4 ]

4 голосов
/ 17 февраля 2020

Создайте dict со всеми подобными ключами и используйте его каждый раз, когда вам нужно с индексом, его будет легко поддерживать

labels = {
    1: {'name': 'Engine block', 'detail': 'Engine block detail'},
    2: {'name': 'Pistons', 'detail': 'Pistons detail'},
    3: {'name': 'PisCrankshafttons', 'detail': 'Crankshaft detail'},
}

for (k, val) in labels.items():
    print("%s: %s" % (k, val['name']))

part = int(input("Choose an engine part to show you details about it: "))

print(labels[part]['detail'])
0 голосов
/ 17 февраля 2020

Если вам действительно нужна дополнительная функция

print(
    "1. Engine block\n"
    "2. Pistons\n"
    "3. Crankshaft\n"
    "4. Camshaft\n"
    "5. Cylinder head\n"
    "6. Connecting Rod\n"
)

def list_dict():
    return {1: "Engine block", 2: "Pistons", 3: "Crankshaft"}

def ans(part):
    return list_dict()[part]


part = int(input("Choose an engine part to show you details about it: "))
print(ans(part))
0 голосов
/ 17 февраля 2020

Я бы предложил использовать что-то вроде этого:

def info_about(parts):
    info = list(parts.values())
    print("\n".join(f"{i+1}.\t\t{name}" for i, name in enumerate(parts)))

    print()
    while True:
        part = input("Choose an engine part to show you details about it: ")
        if not part.isnumeric():
            print("Please enter a valid number")
            continue

        part = int(part)
        if part > len(info) or part < 1:
            print("Please enter a valid number")
            continue
        break

    print(info[part-1])

parts = {
    "Engine block":         "Info about engine block",
    "Pistons":              "Info about pistons",
    "Crankshaft":           "Info about crankshaft",
    "Camshaft":             "Info about camshaft",
    "Cylinder head":        "Info about cylinder head",
    "Connecting Rod":       "Info about connecting rod",
}

info_about(parts)

Это теперь проверяет ввод, чтобы убедиться, что он действителен - что это число c, и что это между 1 и количеством частей.

0 голосов
/ 17 февраля 2020

Вы можете создать класс с вопросом и ответом. Также добавьте функцию в класс, чтобы проверить, совпадает ли ввод с Ответом и вернуть результат соответственно. Вы можете использовать регулярное выражение для получения значения правильного ответа из текста вопроса.

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