Python超簡單習題-2

2019/10/08閱讀時間約 3 分鐘

大概一樣是學生習題

輸入五張不同點數撲克牌然後相加

能輸入字串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)
 

    5會員
    56內容數
    ktest
    留言0
    查看全部
    發表第一個留言支持創作者!