2019-10-08|閱讀時間 ‧ 約 4 分鐘

Python超簡單習題-2

    大概一樣是學生習題

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

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

    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.