🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ دانشجوی سون‌لرن
بهینه سازی تابع parse_result
جامعه پایتون (وب) ایجاد شده در ۱۵ آبان ۱۴۰۱
def parse_result(team):
  win = 0,
  draw = 0,
  lose = 0,
  for i in team['result']:
    if i == 'w':
      win += 1,
    elif i ='d':
      draw += 1,
    else:
      lose += 1,
  return{
      'name': team['name'],
       'win': win,
       'draw': draw,
       'lose': lose,
        }

سلام . روزتون بخیر

برای بهینه سازی تابع parse_result این کد بالا رو نوشتم ولی متاسفانه win , draw, lose رو به صورت تاپل برمیگرداند و ادامه برنامه به مشکل برمیخورد چرا به صورت تاپل هست و برای رفعش چه کاری باید انجام بدیم؟



درووود وقت بخیر . . .

اگر فایل پروژه رو کامل بزارید بهتره .

Reza Mobaraki ۱۵ آبان ۱۴۰۱، ۰۷:۵۰
from data import teams
def parse_result(team):
  return {
            'name': team['name'],
            'win': team['result'].count('w'),
            'draw': team['result'].count('d'),
            'lose': team['result'].count('l'),
            'golz': team['golzadeh'],
            'golkh': team['golkhordeh']
        }
def calculate_score(team):
        score = (team['win']*3)+ team['draw']
        team['score'] = score
        return team
def chek_score(team):
    return team['score']>= 22 
        
def tafazolgol(team):
    tafazol = team['golz'] - team['golkh']
    team['tafazol'] = tafazol
    return team
tmp_score_board = list(map(parse_result, teams))
tmp_passed_team = list(map(tafazolgol, tmp_score_board))
score_board = list(map(calculate_score, tmp_passed_team))
passed_teams = list(filter(lambda team: team['score'] >=22 , score_board))
score_board = sorted(score_board, key = lambda x: x['tafazol'] , reverse = True)
    
score_board = sorted(score_board, key = lambda x:x['score'], reverse = True)
for index,team in enumerate(score_board):
    print(index+1,team)

teams = [

  {'name': 'Golgoharsirjan', 'result':'dddwwlwlwww', 'golzadeh':17, 'golkhordeh':9},

  {'name':'Sepahan' , 'result':'wdlddwdwwdw', 'golzadeh':15, 'golkhordeh':8},

  {'name':'Perspolis' , 'result': 'dwwwwldwwwd', 'golzadeh':11, 'golkhordeh':3},

  {'name': 'Nasaji', 'result':'ddwlwdwwldl', 'golzadeh':14, 'golkhordeh':12},

  {'name': 'Arak', 'result':'wldldwdwdwl', 'golzadeh':7, 'golkhordeh':4},

  {'name': 'Esteghlal' , 'result':'wddwwdwdwwl', 'golzadeh':12, 'golkhordeh':6},


  ]


این داده هایی هست که از جدول لیگ برتر سال 1401 برداشتم ممنون میشم برای تمرین دوم (مرتب کردن براساس تفاضل گل) هم چک بفرمایید که درست نوشتم یا نه؟ درظاهر درست اجرا میشه

Dastmardi ۱۵ آبان ۱۴۰۱، ۱۴:۴۶

سلااااممم وقتت بخیر . امیدورام حالت خوب باشه .

خب برای تمرین دوم که به نظر درسته نوشتید ولی مسئله ای اصلی تمرین اول بود که میخواستید بهینه کنید .

موردی که اشتباه کردید توی پایتون بعد از انتهای هر خط از سیمیکالن (;) یا <(,) که شما گذاشتی> استفاده نمیشه نکته ای که وجود داره زمانی که توی پایتون شما میخواید تاپل بسازید باید از , استفاده کنید دلیل اینکه اونجا به شما تاپل میده دقیقا همینه .

def parse_result(team):
  win = 0, # wrong
  draw = 0, # wrong
  lose = 0, # wrong

  win = 0 
  draw = 0
  lose = 0
  for i in team['result']:
    if i == 'w':
      win += 1, # wrong
    elif i ='d':
      draw += 1, # wrong
    else:
      lose += 1, # wrong
  return{
      'name': team['name'],
       'win': win,
       'draw': draw,
       'lose': lose,
        } 

امیدوارم جواب سوالت رو گرفته باشی و اگ آره ممنون میشم تایید رو بزنی تاپیک بسته شه .


موفق باشی?

بهترین پاسخ
Reza Mobaraki ۱۶ آبان ۱۴۰۱، ۱۸:۰۱