零基礎入門學習python_005筆記及作業_python的數值類型_猜數字小遊戲V2.2

作業1:當使用者輸入錯誤類型的時候,及時提醒使用者重新輸入,防止程式崩潰。

原先的構想打算使用isinstance函數,判斷輸入值是否為數字(int)
程式碼考慮有:

==============================以下為程式碼==============================

temp = input("guess the number from 1 to 10 : ")

while isinstance(temp, int) != True:
    print('Type error')
    temp = input('Please key in again: ')

count = 3
guess = int(temp)

---------------------------------------------------------------分隔線中的分隔線

temp = input("guess the number from 1 to 10 : ")
count = 3
guess = int(temp)

if isinstance(temp, int) != True:
    while guess != secret and count != 0:
        temp = input("So sorry, you're wrong! Please guess again: ")
        guess = int(temp)
        count = count -1
        if count == 0:
            print('so sad')
        elif guess == secret:
            print("Wonderful")
            print("But still no reward")
        else:
            if guess > secret:
                print('Hey, too BIG')
            else:
                print('Hey, too small')
else:
    print('type error, please key in again: ')

=======================================================================

問題很多,但是就講最根本的就好。
就是:input()函數會將所有輸入的內容全部記錄成「字串」!
所以就算我輸入的是數字,他也會記錄成字串。
比方說我輸入「3」,但是python記錄的是「'3'」,
所以isinstance永遠都會是False。

所以甲魚哥說:
以上方法的思路是正確的,不過似乎忽略了一點兒:就是input()的返回值始終是字串,所以type(temp)永遠是<class 'str>!
其實有蠻多的做法可以實現的,不過就目前我們學習過的內容來看,還不足夠。

甲魚哥,學過得內容不夠你開這作業給學生這樣對嗎!!!

這次甲魚哥給的提示如下:

str.isalnum()  所有字元都是數位或者字母,為真返回 Ture,否則返回 False。
str.isalpha()   所有字元都是字母,為真返回 Ture,否則返回 False。
str.isdigit()     所有字元都是數位,為真返回 Ture,否則返回 False。
str.islower()   所有字元都是小寫,為真返回 Ture,否則返回 False。
str.isupper()   所有字元都是大寫,為真返回 Ture,否則返回 False。
str.istitle()      所有單詞都是首字母大寫,為真返回 Ture,否則返回 False。
str.isspace()   所有字元都是空白字元,為真返回 Ture,否則返回 False。

上述的參數也可以透過dir(str)讓我們索引得到。

所以完成的作業該如下:

==============================以下為程式碼==============================
import random
secret = random.randint(1,10)
print("----------Elliot Production----------")
temp = input("guess the number from 1 to 10 : ")
while str.isdigit(temp) != True:
    print('Type Error')
    temp = input('Please key in again: ')
count = 3
guess = int(temp)
while guess != secret and count != 0:
    temp = input("So sorry, you're wrong! Please guess again: ")
    while str.isdigit(temp) != True:
        print('Type Error')
        temp = input('Please key in again: ')
    guess = int(temp)
    count = count -1
    if count == 0:
        print('so sad')
    elif guess == secret:
        print("Wonderful")
        print("But still no reward")
    else:
        if guess > secret:
            print('Hey, too BIG')
        else:
            print('Hey, too small')
print("Game Over")

=======================================================================

作業2:我們人類思維是習慣於“四捨五入”法,你有什麼辦法使得 int() 按照“四捨五入”的方式取整嗎?

5.4 “四捨五入”結果為:5,int(5.4+0.5) == 5
5.6 “四捨五入”結果為:6,int(5.6+0.5) == 6

概念:加上0.5後,原本小數點後就高於0.5的小數就會大於1而進位,再透過int取整數即可。

=======================================================================

作業3:寫一個程式,判斷給定年份是否為閏年。
閏年的定義:能被4整除但不能被100整除,或者能被400整除都是閏年,但被4000整除就不是閏年。

==============================以下為程式碼==============================
print('***閏年判斷器***')

while True:
    temp = input('請使用阿拉伯數字,輸入欲查詢的年份。若要結束程式請輸入exit:')
    while True:
        if temp == 'exit':
            break
        elif str.isdigit(temp) != True:
            print('不是阿拉伯數字我看不懂唷!')
            temp = input('請重新輸入,謝謝~')
        else:
            year = int(temp)
            break
    if temp == 'exit':
        break
    elif year % 4000 == 0:
        print(temp+'年不是閏年')
    elif year % 400 == 0:
        print(temp+'年是閏年')
    elif year % 100 == 0:
        print(temp+'年不是閏年')
    elif year % 4 == 0:
        print(temp+'年是閏年')
    else:
        print(temp+'年不是閏年')

=======================================================================

留言

這個網誌中的熱門文章

簡易版複利計算機

零基礎入門學習python_003筆記及作業_字串與轉譯

哈佛大學計算機通識課程:CS50