Python问题:我的互动故事有问题

2024-05-23 22:13:27 发布

您现在位置: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)

Tags: todefdrivecarcarscoupssm3
3条回答
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)

好的,我冒昧地解释了你的问题。似乎你想做某事,但你不知道怎么做。我将提供一个答案,以帮助您学习如何调试程序,以及如何事情的算法。你知道吗

程序的第一部分几乎是正确的。没什么不对的。您要做的是从打印的选择中选择一辆车。代码的问题在于这一部分:

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

这在很多方面都是错误的。首先,car1car2等,不会像你想象的那样工作。Python将尝试在函数的局部作用域中查找名为car1car2等的对象。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'

现在,好的实践也有这样一种说法,即你所考虑的输入不是预期的。在本例中,为错误的输入提供一个额外的elsecase帐户,并让用户了解这一点可能是一个好主意,因此您也可以添加它。你知道吗

... (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)。你知道吗

我的建议是不要使用cars函数,而是使用carslist。如果希望函数返回值,则使用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]

相关问题 更多 >