[閒聊] 每日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