2015-09-10 2 views
-7

Я вот вставлял в какой-то код из своей интерактивной истории, где хочу, чтобы пользователь выбрал автомобиль для персонажа и заставил его использовать всю историю, но поскольку я новичок в python, я, возможно, сделал это совершенно неправильно.Python. Проблема с моей интерактивной историей

print("Help Rick P. choose a car to drive.") 

print() 

print("1 Chevrolet Camaro") 
print("2 Chevrolet SS Sedan") 
print("3 BMW M3 Sedan") 
print("4 Mercedes-Benz GLE Coupé") 

print() 

def cars(car): 
    Camaro = car1 
    SS_Sedan = car2 
    M3_Sedan = car3 
    GLE_Coupé = car4 

def choice_car(): 
    car = input("Input the corresponding number to the car that you'd like Rick P. to drive... ") 
    print() 
    cars(car) 

choice_car() 

print(car) 
+4

Что ваш вопрос? – BrenBarn

+0

Мне нужна помощь, чтобы позволить пользователю выбрать автомобиль для персонажа –

+2

Возможно, вы захотите перечитать учебник python. У вас здесь немало проблем, которые рассматриваются в начале учебного курса. –

ответ

0
from collections import OrderedDict 

cars = OrderedDict([(1, 'Camaro'), (2, 'SS Sedan'), (3, 'M3 Sedan'), (4, 'GLE Coupé')]) 

print('Help Rick P. choose a car to drive.\n') 
print('\n'.join([str(key) + ' ' + val for key, val in cars.items()]) + '\n') 

def choice_car(invalid = False): 
    if invalid: 
     choice = int(input('Invalid car. Try again...\n')) 
    else: 
     choice = int(input('Input the corresponding number to the car that you\'d like Rick P. to drive...\n')) 
    car = cars.get(choice) 
    if not car: 
     return choice_car(True) 
    return car 

car = choice_car() 

print(car) 
0

Хорошо, я взял на себя смелость интерпретировать ваш вопрос открытым способом. Кажется, что вы хотите что-то сделать, но вы не знаете, как это сделать. Я дам вам ответ, чтобы помочь вам узнать, как отлаживать программу, и как вещи алгоритмически.

Первая часть программы почти правильная. В этом нет ничего плохого. Что вы хотите сделать, так это выбрать автомобиль из распечатанного выбора. Проблема с кодом этой части:

def cars(car): 
    Camaro = car1 
    SS_Sedan = car2 
    M3_Sedan = car3 
    GLE_Coupé = car4 

Это не так во многих отношениях. Прежде всего, car1, car2 и др., Не будут работать так, как вы предполагаете. Python попытается найти объекты с именем car1, car2 и др. В локальной области функций. ref Если он не находит его, он будет искать привязку этой переменной в глобальном пространстве. Если он не найден, он поднимет NameError.

Кроме того, этот код не позволит вам выбрать автомобиль. Что вы хотите сделать: проверьте, какое значение параметр car содержит и на основе этого возвращает определенное значение. Вы бы сделать что-то с if/elif заявлением подобное:

def cars(car): 
    if car == 1: 
     return 'Camaro' 
    elif car == 2: 
     return 'SS_Sedan' 
    elif car == 3: 
     return 'M3_Sedan' 
    elif car == 4: 
     return 'GLE_Coupe' 

Теперь, хорошая практика также есть это, что вы объясняете для ввода, не то, что, как ожидается. В этом случае, имея дополнительную учетную запись else для ошибочного ввода, и позволить пользователю теперь об этом быть хорошей идеей, вы тоже можете добавить это.

... (snip) ... 
elif car == 4: 
    return 'GLE_Coupe' 
else: 
    return 'Invalid Car' # you could return None or even better raise an exception, but since you are a beginner let's keep it simple 

Обратите внимание, что во всех случаях ваша функция возвращает string, который содержит модель автомобиля, а не просто случайные связывания объектов с именами. То, что вы закодировали, если оно работает так, как вы ожидали, будет чем-то вроде перечисления (вы можете прочитать около enums here).

0

Мое предложение состоит в том, чтобы не использовать функцию вагонов, а автомобили list. Если вы хотите, чтобы функция возвращала значение, используйте инструкцию return.

На боковой ноте ваш код заставляет его выглядеть так, как будто вы еще не изучили Python tutorial. Пожалуйста, сделай.

cars = ['Camaro', 
     'SS Sedan', 
     'M3 Sedan', 
     'GLE Coupé'] 

def choose_car(): 
    car = int(input("Input the corresponding number to the car that you'd like Rick P. to drive... \n")) + 1 
    return cars[car] 

Или, если вы не хотите работать с поворотной строкой в ​​integer, используйте dictionary.

cars = {'1': 'Camaro', 
     '2': 'SS Sedan', 
     '3': 'M3 Sedan', 
     '4': 'GLE Coupé'} 

def choose_car(): 
    car = input("Input the corresponding number to the car that you'd like Rick P. to drive... \n") 
    return cars[car] 
Смежные вопросы