[闲聊] 每日CPE

楼主: kerycheng (kk)   2022-12-18 15:45:00
今天写的是UVA10903 Rock-Paper-Scissors Tournament
https://cpe.cse.nsysu.edu.tw/cpe/file/attendance/problemPdf/10903.pdf
简单来说就是会有两个人玩猜拳,要你计算这两人的胜率是多少
如果有平手则当作0场不计,若全平手则输出"-",当输入"0"时结束程式
看了一下其他人说有很多陷阱暗资,但没办法实测所以就单纯按sample input去解了
程式:
def compare(first_move, second_move, results1, results2): # 比较出拳胜负
# 若选手1赢的时候
if first_move == 'paper' and second_move == 'rock' or first_move ==
'rock' and second_move == 'scissors' or first_move == 'scissors' and
second_move == 'paper':
results1[0] += 1
results2[1] += 1
# 若选手2赢的时候
elif first_move == 'paper' and second_move == 'scissors' or first_move ==
'rock' and second_move == 'paper' or first_move == 'scissors' and second_move
== 'rock':
results1[1] += 1
results2[0] += 1
def win_average(results): # 计算胜率平均
if results[0] == results[1] == 0: # 若全为空则输出"-"
print('-')
else:
avg = results[0] / (results[0] + results[1])
print('{:.3f}'.format(avg))
while True:
n, k = map(int, input().split()) # 把input拆开
if n == 0:
break
results_p1 = [0, 0] # 宣告p1和p2的阵列用来记录胜负[胜, 负]
results_p2 = [0, 0]
for _ in range(k * n * (n-1) // 2):
p1, m1, p2, m2 = input().split() # 把input分别拆成 选手1 出拳 选手2 出

if p1 == '1': # 若为选手1
compare(m1, m2, results_p1, results_p2)
else: # 若为选手2
compare(m2, m1, results_p1, results_p2)
win_average(results_p1)
win_average(results_p2)
print()
去比较猜拳胜负的函式写的有点白痴,但想不到更好的写法
最后要输入0结束程式的时候会先跳一次
n, k = map(int, input().split()) 这行的错误,跟我说他抓不到k的值然后才结束程式
python好像没办法分成两次input()去抓同一行的input值
不晓得有没有其他写法可以不让这行报错
code连结:https://onlinegdb.com/fT11Kdw41

Links booklink

Contact Us: admin [ a t ] ucptt.com