我正试图使用class
属性来创建特定的字典并调用随机键/项。这是我目前的代码,它从字典理解中调用了一项特定的运动:
import random
# list dictionary
result = {'Peter': ['Male', 'Basketball'], 'Carlos': ['Male', 'Tennis'], 'Angela': ['Female', 'Golf'], 'David': ['Male', 'Basketball'], 'Kaitlin': ['Female', 'Golf'], 'Marco': ['Male', 'Tennis'], 'Andrew': ['Male', 'Golf'], 'Carmen': ['Female', 'Basketball']}
#list desired sport
sportChoice = input("Enter desired sport workout: ")
# filter dictionary for the sportChoice variable
parsedData = [
'n'.join([f"Name: {name}", f"Gender: {info[0]}", f"Sport: {info[1]}"])
for name, info in result.items()
if info[1] == "{}".format(sportChoice)
]
# grab a random dictionary key and item from the filtered list
intList = []
for numbers in range(len(parsedData)):
intList.append(numbers)
print(intList)
print(''.join(parsedData[int(random.choice(intList))]))
上面的代码使我能够编写某项运动,并获得一个包含其条目的随机密钥。然而,这只适用于调用所需的运动。我希望代码也能用于选择特定的性别(genderChoice
(,但我在实现程序时遇到了困难。这是我现在拥有的:
import random
# list dictionary
result = {'Peter': ['Male', 'Basketball'], 'Carlos': ['Male', 'Tennis'], 'Angela': ['Female', 'Golf'], 'David': ['Male', 'Basketball'], 'Kaitlin': ['Female', 'Golf'], 'Marco': ['Male', 'Tennis'], 'Andrew': ['Male', 'Golf'], 'Carmen': ['Female', 'Basketball']}
# list desired sport
sportChoice = input("Enter desired sport workout: ")
genderChoice = input("Enter desired Gender. If no preference, leave blank: ")
# create if statement for choice of gender
if genderChoice == "":
genderChoice == "Male"
# filter dictionary for the variable sportChoice
parsedData = [
'n'.join([f"Name: {name}", f"Gender: {info[0]}", f"Sport: {info[1]}"])
for name, info in result.items()
if info[1] == "{}".format(sportChoice)
]
# grab a random dictionary key and item from the filtered list
intList = []
for numbers in range(len(parsedData)):
intList.append(numbers)
print(intList)
print(''.join(parsedData[int(random.choice(intList))]))
我觉得我没有尽可能有效地完成这项工作。因此我提到了类属性。或者其他功能可能会更好。下面是我试图用一个类做这件事的一些非常糟糕的代码:
result = {'Peter': ['Male', 'Basketball'], 'Carlos': ['Male', 'Tennis'], 'Angela': ['Female', 'Golf'], 'David': ['Male', 'Basketball'], 'Kaitlin': ['Female', 'Golf'], 'Marco': ['Male', 'Tennis'], 'Andrew': ['Male', 'Golf'], 'Carmen': ['Female', 'Basketball']}
intList = []
class CreateSportList():
def sport(self):
parsedData = [
'n'.join([f"Name: {name}", f"Gender: {info[0]}", f"Sport: {info[1]}"])
for name, info in result.items()
if info[1] == "{}".self
for numbers in range(len(parsedData)):
intList.append(numbers)
print(intList)
print(''.join(parsedData[int(random.choice(intList))]))
CreateSportList(Tennis, Female)
如有任何帮助/指导,我们将不胜感激!
以下是所需的输出:
Enter desired sport workout: Golf
Enter desired Gender. If no preference, leave blank: Female
Name: Angela
Gender: Female
Sport: Golf
第一项,您有:
if genderChoice == "":
genderChoice == "Male"
第二行应该使用=
,而不是==
。
这里有一堆不必要的代码。这是你想要的:
import random
# Set up database.
result = {'Peter': ['Male', 'Basketball'], 'Carlos': ['Male', 'Tennis'], 'Angela': ['Female', 'Golf'], 'David': ['Male', 'Basketball'], 'Kaitlin': ['Female', 'Golf'], 'Marco': ['Male', 'Tennis'], 'Andrew': ['Male', 'Golf'], 'Carmen': ['Female', 'Basketball']}
# list desired sport
sportChoice = input("Enter desired sport workout: ")
genderChoice = input("Enter desired Gender. If no preference, leave blank: ")
if not genderChoice:
genderChoice = "Male"
parsedData = [
'n'.join([f"Name: {name}", f"Gender: {info[0]}", f"Sport: {info[1]}"])
for name, info in result.items()
if info[1] == sportChoice and info[0] == genderChoice
]
print(random.choice(parsedData))
注意,"{}".format(sportChoce)
与sportChoice
完全相同。请注意,您不需要创建列表索引的数组。让random.choice
从列表中选择即可。
你可能会考虑创建一个class Person
来保持他们的性别和运动,但这并不能真正让你受益匪浅。你仍然需要一个接一个地搜索它们。