问题描述
我的任务是从字典中的“监护人”键之间取出并删除“和”。这是嵌套在列表中的字典:
PLAYERS = [{
'name': 'Karl Saygan','guardians': 'Heather Bledsoe','experience': 'YES','height': '42 inches'
},{
'name': 'Matt Gill','guardians': 'Charles Gill and Sylvia Gill','experience': 'NO','height': '40 inches'
},{ 'name': 'Sammy Adams','guardians': 'Jeff Adams and Gary Adams','height': '45 inches'
},{
'name': 'Chloe Alaska','guardians': 'David Alaska and Jamie Alaska','height': '47 inches'
},{
'name': 'Bill Bon','guardians': 'Sara Bon and Jenny Bon','height': '43 inches'
},{
'name': 'Joe Kavalier','guardians': 'Sam Kavalier and Elaine Kavalier','height': '39 inches'
},{
'name': 'Phillip Helm','guardians': 'Thomas Helm and Eva Jones','height': '44 inches'
}
]
我在没有“ ”的情况下对它进行了格式化:
import random
from constants import PLAYERS
from constants import TEAMS
GREETING = 'BASKETBALL TEAM STATS TOOL\n'
players = PLAYERS.copy()
teams = TEAMS.copy()
print(GREETING.upper())
print('-----MENU-----\n')
max_players = len(players)/len(teams)
exp_players = []
nexp_players = []
panthers = []
bandits = []
warriors = []
squads = [panthers,bandits,warriors]
num_teams= len(squads)
def balance_teams(players):
for player in players:
experience = player['experience']
if experience == 'YES':
exp_players.append(player)
else:
nexp_players.append(player)
def balance_exp(exp_lists):
for num in range(len(exp_lists)):
squads[num % num_teams].append(exp_lists[num])
def dis_options():
print('Here are your Choices: \n A) display Team Stats \n B) Quit\n\n')
while max_players > 0:
try:
activate = input('Enter an option: ')
if activate.lower() == "a" or activate.lower() == "b":
if activate.lower() == "a":
show_teams()
elif activate.lower() == "b":
print('Thank you,come back for more basketball stats!')
exit()
else:
raise ValueError
except ValueError as err:
print("\nInvalid input.Please choose either A or B\n")
def show_teams():
print('\nA)Panthers\n\nB)Bandits\n\nC)Warrirors\n\n')
try:
team_sel= input('Enter an option: ')
if team_sel.lower() == "a" or team_sel.lower()=="b" or team_sel.lower() == "c":
if team_sel.lower() == "a":
team = "Panthers"
members = len(panthers)
exp_count = 0
height = []
for players in panthers:
if players['experience']== True:
exp_count += 1
height.append(players['height'])
nexp_count = (members - exp_count)
average_height = (round(sum(height)/members))
print('\nTEAM: {} Stats\n--------------------\nTotal Players: {}\nExperienced Players: {}\nNon-experienced Players: {}\nAverage Height: {} inches\n\n'.format(team,members,exp_count,nexp_count,average_height))
print(pretty_data(*panthers,sep= ','))
elif team_sel.lower() == "b":
team = "Bandits"
members = len(bandits)
exp_count = 0
height = []
for players in bandits:
if players['experience']== True:
exp_count += 1
height.append(players['height'])
nexp_count = (members - exp_count)
average_height = (round(sum(height)/members))
print('\nTEAM: {} Stats\n--------------------\nTotal Players: {}\nExperienced Players: {}\nNon-experienced Players: {}\nAverage Height: {} inches\n\n'.format(team,average_height))
print(pretty_data(*bandits,'))
elif team_sel.lower() == "c":
team = "Warriors"
members = len(warriors)
exp_count = 0
height = []
for players in warriors:
if players['experience']== True:
exp_count += 1
height.append(players['height'])
nexp_count = (members - exp_count)
average_height = (round(sum(height)/members))
print('\nTEAM: {} Stats\n--------------------\nTotal Players: {}\nExperienced Players: {}\nNon-experienced Players: {}\nAverage Height: {} inches\n\n'.format(team,average_height))
print(pretty_data(*warriors,'))
else:
raise ValueError
except ValueError as err:
print("\nInvalid input.Please choose either A,B or C\n")
def pretty_data(*team,'):
for player in team:
print(f"Name: {player['name']}\nGuardians: {player['guardians']}\nExperience: {player['experience']}\nHeight: {player['height']}\n")
if __name__ == '__main__':
def clean_data():
for player in players:
if player['experience'].lower() == 'yes':
player['experience'] = True
else:
player['experience'] = False
for player in players:
if player['height'] != int():
player['height'] = int(player['height'].split()[0])
balance_teams(players)
balance_exp(exp_players)
balance_exp(nexp_players)
clean_data()
dis_options()
for player in PLAYERS:
player['guardians'] = player['guardians'].split(' and ')
结果打印如下:
Name: Herschel Krustofski
Guardians: ['Hyman Krustofski','Rachel Krustofski']
Experience: True
Height: 45
Name: Matt Gill
Guardians: ['Charles Gill','Sylvia Gill']
Experience: False
Height: 40
Name: Joe Kavalier
Guardians: ['Sam Kavalier','Elaine Kavalier']
Experience: False
Height: 39
Name: Eva Gordon
Guardians: ['Wendy Martin','Mike Gordon']
Experience: False
Height: 45
括号和引号被添加回来。我尝试将.split 添加到pretty_data 函数,但它仍然包含' ' 和[]。有人可以给我指导吗?
解决方法
方括号和引号是 Python 用来表示字符串(引号)和列表(方括号)的符号。它们没有被添加,你不能把它们拿走。现在,如果您只想在不看到括号的情况下打印它们,那么这很容易。
example = ['Hyman Krustofski','Rachel Krustofski']
print(f"Guardians: {example}")
print(f"Guardians: {','.join(example)}")
这产生:
Guardians: ['Hyman Krustofski','Rachel Krustofski']
Guardians: Hyman Krustofski,Rachel Krustofski
,
简单替换:
player['guardians'] = player ['guardians'].replace(' and ',',')