🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۶ Alireza Maleki
این چرا خطا میده ؟
جامعه پایتون (وب) ایجاد شده در ۲۸ مرداد ۱۴۰۲
teams=[
     {'name':'Real Madrid', 'results' : (
         'w','w','w','l','l','w','w','w','d','w','w','w','d','w','w','d','d','l','w'
         ),'f':80,'a':31}
    ,{'name':'Barcelona', 'results' : (
        'w','w','w','l','l','w','w','w','d','w','d','d','d','w','w','d','d','l','w'
        ),'f':68,'a':38}
    ,{'name':'Athletico Madrid', 'results' : (
        'w','w','w','d','d','w','w','w','d','w','l','w','d','w','w','d','d','l','w'
        ),'f':65,'a':43}
    ,{'name':'Sevia', 'results' : (
        'w','d','d','l','l','w','w','w','d','w','w','l','d','w','w','d','d','l','w'
        ),'f':53,'a':30}
    ,{'name':'Real Betis', 'results' : (
        'w'',w','w','l','l','w','l','w','d','w','w','l','l','w','w','d','d','l','w'
        ),'f':62,'a':40}
    ]
def laliga_result(team):
    return{
        'name':team['name'],
        'win':(list(team['results']).sort()).index('w') - (list(team['results']).sort()).index(-1) + (1),
        'draw':(list(team['results']).sort()).index('d')+ 1,
        'lose':(list(team['results']).sort()).index('l') +  - (list(team['results']).sort()).index('d')
              }

در خط زیر یک کاما (,) کنار w اضافه دارد که باید حذف شود:

'w'',w','w','l','l','w','l','w','d','w','w','l','l','w','w','d','d','l','w'
        ),'f':62,'a':40}

متد sort() بعد از مرتب کردن لیست مقداری برنمیگرداند که بتوان روی آن index را اجرا کرد. بنابراین، با اجرای list(team['results']).sort() متد index روی None اجرا میشود که بی پاسخ خواهد ماند.

کد صحیح به شکل زیر خواهد بود:

teams = [
    {'name':'Real Madrid', 'results' : ('w','w','w','l','l','w','w','w','d','w','w','w','d','w','w','d','d','l','w'),
     'f':80,'a':31},
    {'name':'Barcelona', 'results' : ('w','w','w','l','l','w','w','w','d','w','d','d','d','w','w','d','d','l','w'),
     'f':68,'a':38},
    {'name':'Athletico Madrid', 'results' : ('w','w','w','d','d','w','w','w','d','w','l','w','d','w','w','d','d','l','w'),
     'f':65,'a':43},
    {'name':'Sevia', 'results' : ('w','d','d','l','l','w','w','w','d','w','w','l','d','w','w','d','d','l','w'),
     'f':53,'a':30},
    {'name':'Real Betis', 'results' : ('w','w','w','l','l','w','l','w','d','w','w','l','l','w','w','d','d','l','w'),
     'f':62,'a':40}
]
def laliga_result(team):
    results = list(team['results'])
    return {
        'name': team['name'],
        'win': results.count('w'),
        'draw': results.count('d'),
        'lose': results.count('l')
    }
for team in teams:
    result = laliga_result(team)
    print(result)
محسن موحد ۲۹ مرداد ۱۴۰۲، ۰۰:۱۲

از پاسختون ممنونم ولی به جز اون خطا من میخوام برای بهینه سازی برنامه به جای شمارش تعداد w, l, d به ترتیب حروف انگلیسی مرتب کنم که برای اینکار تاپلم رو باید تبدیل به لیست کنم

و بعدش برای حساب کردن برد‌ها لن لیست رو منهای اولین w کنم

و بعدش برای حساب کردن تعداد تساوی‌ها جایگاه اولین l رو حساب کنم

و در آخر برای محاسبه تعداد باخت‌ها جایگاه اولین w را منهای جایگاه اولین l کنم


Alireza Maleki ۲۹ مرداد ۱۴۰۲، ۰۸:۴۲

متوجه نشدم.

مسئله چیست . چه چیزی میخواهید پیاده کنید؟

محسن موحد ۲۹ مرداد ۱۴۰۲، ۱۵:۳۰

طبق توضیح قبلی‌ای که دادم به جای شمارش با استفاده از جمع و تفریق تعداد w, l, d را محاسبه کنم

Alireza Maleki ۲۹ مرداد ۱۴۰۲، ۱۵:۳۵

بازهم متوجه الگوریتمی که در ذهن دارید نشدم.

list(team['results']).sort()).index('w')

کدتون رو فیکس میکنم تا خودتون بتونید پیاده کنید.

sort آرایه رو بصورت رفرنس مرتب میکنه و خروجی نداره بجاش باید از sorted استفاده کنید.

team[results] لیست هست نیاز نیست تبدیل به list بشه.

تصحیح شده کد:

sorted(team['results']).index('w')

این کد موقعیت ایندکس w رو برمیگردونه.

مثال:

team = { 'name': 'A-Team', 'results': ['l', 'w', 'w', 'w', 'w', 'd'] }
print(sorted(team['results']).index('w')) # output: 2
بهترین پاسخ
محسن موحد ۳۰ مرداد ۱۴۰۲، ۱۷:۵۷

دقیقا منظورم همین بود سپاس از پاسخ شما?

Alireza Maleki ۳۱ مرداد ۱۴۰۲، ۰۹:۰۹