16 June 2025
from itertools import product
from copy import deepcopy
class Team:
def __init__(self, name: str, seed: int):
self.name: str = name
self.init_seed: int = seed
self.middle_seed: int = seed
self.wins: int = 0
self.losses: int = 0
self.opponents: list[Team] = []
self.buchholz: int = 0
t_teams = list[Team]
def swiss_sim_ex(teams: t_teams):
n = len(teams) // 2
c = 0
# 第一轮
round1_all_results = product([0, 1], repeat=n)
for round1_results in round1_all_results:
round1_teams = deepcopy(teams)
round1_pairs = round1_pairing(round1_teams)
simulate_matches_ex(round1_pairs, round1_results)
# 第二轮
round2_all_results = product([0, 1], repeat=n)
for round2_results in round2_all_results:
round2_teams = deepcopy(round1_teams)
round2_pairs = round2_pairing(round2_teams)
simulate_matches_ex(round2_pairs, round2_results)
# 第三轮
round3_pairs = round3_pairing(round2_teams)
if not round3_pairs:
c += 1
print(round1_results, round2_results)
print(f"共{c}种回溯情况")
NUM_TEAM = 16
teams = [Team(f"Team{i + 1}", i + 1) for i in range(NUM_TEAM)]
swiss_sim_ex(teams)
Science Yuan对 py 来说是能不能 typecheck 的区别
Python 的 except 可以顯式指定要 catch 哪個 class,所以其實無論是 raise Exception 還是 return Exception 都是 type safe 的
🅼🆁🆂🆆🅸🆃🅲🅷我一般是谁调用谁负责,你找人家要东西,没要来,你不得自己想办法吗?
从用返回值返回错误的角度看,他这里的问题是,失败时返回None给的信息太少,导致调用方无法“正确”的进行处理,举个例子,我有个http接口,失败的情况有两种,一种是因为网络问题没返回结果,另一种是返回的结果不正确,那么第一种调用者可能能重试,但第二种没有重试的意义,如果都返回None那么就无法区分从而进行有意义的错误处理了
Serephus从用返回值返回错误的角度看,他这里的问题是,失败时返回None给的信息太少,导致调用方无法“正确”的进行处理,举个例子,我有个http接口,失败的情况有两种,一种是因为网络问题没返回结果,另一种是返回的结果不正确,那么第一种调用者可能能重试,但第二种没有重试的意义,如果都返回None那么就无法区分从而进行有意义的错误处理了
是的,应该有这么两种情况。要么None,要么是个错误的值。但我觉得错误与否应该在调用方判断。如果fetch()是个函数,None就是没拿到。其余的都可以认为是拿到了。至于拿到的对错应该调用方来判断。
🅼🆁🆂🆆🅸🆃🅲🅷是的,应该有这么两种情况。要么None,要么是个错误的值。但我觉得错误与否应该在调用方判断。如果fetch()是个函数,None就是没拿到。其余的都可以认为是拿到了。至于拿到的对错应该调用方来判断。
😅一般用返回值来返回错误的语言都是用Result[T, E]这样的类型返回的,返回T代表成功,返回E代表失败,成功失败是被调用方决定的