大概一樣是學生習題
輸入五張不同點數撲克牌然後相加
能輸入字串1~13,也可以輸入字串AJQK
思路是用isdigit檢查輸入是不是數字,是就直接迭代,不是查表對應的數字
所以建立兩個list用來對照, 找出字母在a的index然後撈出b對應位置的數字
# -*- coding: UTF-8 -*-
a=['A','J','Q','K','a','j','q','k']
b=[1,11,12,13,1,11,12,13]
result = 0
for i in range (0,5):
card = input('>>> number' + str(i+1) + ': ')
if card.isdigit():
result += int(card)
else:
result += int(b[a.index(card)])
print (result)
但這樣有點簡陋,超過13的數字一樣會加總, 然後輸入非AJQK字母會報錯
=========================================
更新了一下變成輸入1~13, AKQJ 以外的字都要重新輸入
用while loop break和try:except來控制程式流向
每一次輸入都進while loop檢查是不是數字
如果是就再檢查是不是1~13, 是的話中斷loop出來疊加
不是數字就檢查是不是在列表內, 是的話轉換成數字中斷loop出來疊加
不是就會報錯被except ValueError抓到, 然後重新輸入
# -*- coding: UTF-8 -*-
a=['A','J','Q','K','a','j','q','k']
b=[1,11,12,13,1,11,12,13]
result = 0
for i in range (0,5):
while True:
try:
card = input('>>> number' + str(i+1) + ': ')
if card.isdigit():
w = int(card)
if w <= 13 and w >= 1: break
else: print ('<bad input1>')
else:
w = int(b[a.index(card)])
break
except ValueError: print ('<bad input2>')
result += w
print (result)