看板 Python 關於我們 聯絡資訊
問題: 昨天使用chatgpt請它協助我下面敘述: 八支隊伍A,B,C,D,E,F,G,任兩隊比賽一場,比賽結果只有三種:勝、敗、和,規則是勝 利者積分得2分,敗者積分得0分,平手兩隊各積分得1分。 請利用pyhton幫我模擬出上述問題,遍歷所有對戰統計情形, 若滿足隊伍A總積分值至少贏過4個隊伍的總積分值時,A隊伍與其他隊伍的勝、敗、和之 數量,然後取全部比完後滿足條件的最小A總積分值 --- 它回復:請問您希望考慮到所有可能的對戰結果嗎? 這樣的模擬可能需要考慮到非常龐大的組合數量,因此執行時間可能會很長。 如果您願意等待,我們可以進行完整的模擬,但請注意執行時間可能會很久。 或者,如果您有特定的條件或限制,我們可以根據那些條件進行模擬,以加快 計算速度。請讓我知道您的選擇。 --- 我加上一些敘述: 限制為:比完C(8,2)=28場後,滿足隊伍A總積分值至少贏過4個隊伍的總積分值時,A隊伍 的所有可能積分 --- 它回復: from itertools import combinations teams = ['A', 'B', 'C', 'D', 'E', 'F', 'G'] # 隊伍名稱 total_games = 28 # 總比賽場次 min_a_score = float('inf') # A隊的最小積分值,初始設定為正無窮大 def calculate_scores(results): scores = {team: 0 for team in teams} # 初始化隊伍得分 for (team1, team2), result in results.items(): if result == 'win': scores[team1] += 2 scores[team2] += 0 elif result == 'loss': scores[team1] += 0 scores[team2] += 2 else: # tie scores[team1] += 1 scores[team2] += 1 return scores # 遍歷所有可能的對戰結果 results = {} for teams_comb in combinations(teams, 2): for result in ['win', 'loss', 'tie']: results[teams_comb] = result # 計算每種對戰結果的積分情況 scores = calculate_scores(results) # 檢查是否滿足條件 sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True) a_winning_teams = [team for team, score in sorted_scores[:4]] # A贏過的隊伍 if 'A' in a_winning_teams: if len(a_winning_teams) == 4 and scores['A'] < min_a_score: min_a_score = scores['A'] print(f"A隊在至少贏過4個隊伍的情況下的最小積分值為:{min_a_score}") 但這跑出來根本不行,後來想想會不會是所有結果總共有3^28太大 (不過不是才大約14位數,沒道理電腦無法處理10^99次方問題) 它code內 results[teams_comb] = result 這樣寫怪怪的吧,沒有辦法記錄到 誰勝、負還是和 想問看看有沒有高手能給我修程式的方向,另外這種問題是不是用套件itertool比較省 事?(套件應該也是基於一些演算法論文等做出來的,時間效率應該不差吧?!) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.27.210.24 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1689412472.A.02E.html
lycantrope: 垃圾進垃圾出 07/15 17:57
ddavid: 你為什麼會期待 ChatGPT 在一次 prompt 就一定給你正確程 07/16 01:11
ddavid: 式?熟練使用的工程師都知道本來就要檢查它出來的邏輯然後 07/16 01:12
ddavid: 看要手動修正或對它提出勘誤建議讓它修正啊XD 07/16 01:12
ddavid: 它的優點就是很快幫你把看起來可行的框架寫出來了,剩下細 07/16 01:13
ddavid: 節如果你都看出問題在哪了,修正很快吧 07/16 01:13
aalexx: 有點想吐槽一下3^28 07/16 15:49
aalexx: 10^99又是哪裡來的神秘數字?按部就班學吧 07/16 15:57
wuyiulin: results[teams_comb] = result 看起來就很 hashTable, 07/17 01:56
wuyiulin: 你先學怎麼寫程式吧。 07/17 01:56
ddavid: 我猜他不懂的是為什麼那樣可以記錄誰勝誰負,他沒注意程 07/17 09:24
ddavid: 式裡就是紀錄一個對戰 Pair 中第一隊的勝負,而記了一隊 07/17 09:24
ddavid: ,第二隊的勝負當然也就知道了這個邏輯XD 07/17 09:24