2

だから私は今Pythonを学ぼうとしています。私は、限られたWebデザインとCMS管理の経験しか持たない初心者プログラマーです。

NASCARチームの車番号をユーザーに尋ねる簡単な小さなプログラムを作成することにしました。各チームには、一連の変数が関連付けられていました。これまでのところ、私は#1と#2を実行し、残りを完了する前にコードのアクションをテストしたいと思いました。

私はそれを間違って考えているに違いないと思う問題に遭遇しました。あるいは、言語でコーディングを学び始めたばかりで知識が不足しているのかもしれません。

基本的には車番号を聞いてきて、入れると「ドライバー(車番号)」と表示されるので、「2」と入力すると「ドライバー2」と表示されます。しかし、正しく実行された場合に「BradKeselowski」を表示する他の変数driver2を代わりに呼び出すようにします。

これが私のコードです:

# NASCAR Numbers
# Display Driver Information Based on your Car Number Input

print("\t\t\tWelcome to NASCAR Numbers!")
print("\t\t Match Car Numbers to the Driver Names.")
input("\nPress the Enter Key to Play")

# 1 - Jamie McMurray
carnumber1 = ("1")
driver1 = ("Jamie McMurray")
make1 = ("Chevrolet")
sponsor1 = ("Bass Pro Shops/Allstate")
# 2 - Brad Keselowski
carnumber2 = ("2")
driver2 = ("Brad Keselowski")
make2 = ("Dodge")
sponsor2 = ("Miller Lite")

inputnumber = input("\nWhat car number do you want to lookup?\n\nCar Number:\t#")
driver = "driver"
print(driver + inputnumber)

誰かが私を正しい方向に導くことができますか?

4

4 に答える 4

3

重要なデータ構造を利用していません。ある値を別の値にマップする場合は常に、辞書が必要になる可能性があります。アイテムのシーケンシャルリストがある場合は常に、リストが必要です。

>>> # NASCAR Numbers
... # Display Driver Information Based on your Car Number Input
... 
>>> print("\t\t\tWelcome to NASCAR Numbers!")
            Welcome to NASCAR Numbers!
>>> print("\t\t Match Car Numbers to the Driver Names.")
         Match Car Numbers to the Driver Names.
>>> cars = [] # Use a list to store the car information.
>>> cars.append({'driver': 'Jamie McMurray', 'make': 'Chevrolet', 'sponsor': 'Bass Pro Shops/Allstate'}) # Each individual car detail should be in a dictionary for easy lookup.
>>> cars.append({'driver': 'Brad Keselowski', 'make': 'Dodge', 'sponsor': 'Miller Lite'})
>>> inputnumber = input("\nWhat car number do you want to lookup?\n\nCar Number:\t#")

What car number do you want to lookup?

Car Number: #2
>>> driver = cars[inputnumber-1]['driver'] # Python lists start at zero, so subtract one from input.
>>> print("driver" + str(inputnumber))
driver2
>>> print(driver)
Brad Keselowski

ちなみに、inputユーザーが入力したものはすべてPythonとして評価されるため、使用するのは危険です。を使用することを検討してraw_inputから、入力を手動で整数にキャストしてください。

于 2012-05-30T21:09:43.833 に答える
1

次のようなものを試してください。

from collections import namedtuple

Car = namedtuple('Car', 'driver make sponsor')


cars = [
        Car('Jim', 'Ford', 'Bass Pro Shops'),
        Car('Brad', 'Dodge', 'Miller Lite'),
        ]


inputnumber = input("\nWhat car number do you want to lookup?\n\nCar Number:\t#")
print(cars[int(inputnumber) - 1].driver)
于 2012-05-30T21:13:17.473 に答える
1

編集:

  1. コメントを追加
  2. Python 3を使用しているため、raw_input()をinput()に変更しました

# I create a class (a structure that stores data along with functions that
# operate on the data) to store information about each driver:
class Driver(object):
    def __init__(self, number, name, make, sponsor):
        self.number = number
        self.name = name
        self.make = make
        self.sponsor = sponsor

# Then I make a bunch of drivers, and store them in a list:
drivers = [
    Driver(1, "Jamie McMurray", "Chevrolet", "Bass Pro Shops/Allstate"),
    Driver(2, "Brad Keselowski", "Dodge", "Miller Lite")
]

# Then I use a comprehension (x for d in drivers) - it's kind of
# like a single-line for statement - to look at my list of drivers
# and create a dictionary so I can quickly look them up by driver number.
# It's a shorter way of writing:
#   number_index = {}  # an empty dictionary
#   for d in drivers:
#       number_index[d.number] = d
number_index = {d.number:d for d in drivers}

# Now I make a "main" function - this is a naming convention for
# "here's what I want this program to do" (the preceding stuff is
# just set-up):
def main():
    # show the welcome message
    print("\t\t\tWelcome to NASCAR Numbers!")
    print("\t\t Match Car Numbers to the Driver Names.")

    # loop forever
    # (it's not actually forever - when I want to quit, I call break to leave)
    while True:
        # prompt for input
        # get input from keyboard
        # strip off leading and trailing whitespace
        # save the result
        inp = input("\nEnter a car number (or 'exit' to quit):").strip()

        # done? leave the loop
        # .lower() makes the input lowercase, so the comparison works
        #   even if you typed in 'Exit' or 'EXIT'
        if inp.lower()=='exit':
            break

        try:
            # try to turn the input string into a number
            inp = int(inp)
        except ValueError:
            # int() didn't like the input string
            print("That wasn't a number!")

        try:
            # look up a driver by number (might fail)
            # then print a message about the driver
            print("Car #{} is driven by {}".format(inp, number_index[inp].name))
        except KeyError:
            # number[inp] doesn't exist
            print("I don't know any car #{}".format(inp))

# if this script is called directly by Python, run the main() function
# (if it is loaded as a module by another Python script, don't)
if __name__=="__main__":
    main()
于 2012-05-30T22:25:43.817 に答える
0

コードを最小限の変更で機能させるには、2回変更inputした後raw_input、次の代わりにこれを使用できますprint(driver + inputnumber)

 print(vars()[driver + inputnumber])

ただし、これはかなり悪い方法vars()です。変数のdictを提供するため、キーを車の番号にして、自分でdictを作成する必要があります。

次のように、各車/ドライバーを1つの辞書としてモデル化できます。

# A dictionary to hold drivers
drivers = {}

# 1 - Jamie McMurray
jamie = {} # each driver modelled as a dictionary
jamie["carnumber"] = "1"
jamie["name"] = "Jamie McMurray"
jamie["make"] = "Chevrolet"
jamie["sponsor"] = "Bass Pro Shops/Allstate"

drivers[1] = jamie

# 2 - Brad Keselowski
brad = {}
brad["carnumber"] = "2"
brad["name"] = "Brad Keselowski"
brad["make"] = "Dodge"
brad["sponsor"] = "Miller Lite"

drivers[2] = brad

inputnumber = raw_input("\nWhat car number do you want to lookup?\n\nCar Number:\t#")

inputnumber = int(inputnumber) # Convert the string in inputnumber to an int

driver = drivers[inputnumber] # Fetch the corresponding driver from drivers

print(driver) # Print information, you can use a template to make it pretty

すぐに、これをモデル化する自然な方法は、ドライバーを表すクラス(およびおそらく車を表す他のクラス)を作成することであることに気付くでしょう。

于 2012-05-30T21:13:16.873 に答える