1. 程式人生 > >猜數字遊戲有感(演算法啟蒙)

猜數字遊戲有感(演算法啟蒙)

python新手學習食用;

猜數字遊戲規則:

隨機產生一個1-100之間的整數,然後讓使用者猜這個數字,並讀取使用者的輸入。如果使用者輸入的不是1~100之間的整數或者輸入的帶有字母,則提示使用者輸入不合法,當用戶沒有猜對的時候,提示使用者的輸入太大或太小,並再次讀取使用者的輸入,當用戶猜對的時候,輸出使用者猜測的次數

第一次思路:

先判斷這個輸入的東西是不是帶有字母,如果帶有提示使用者重新輸入,如果沒有就進行下一步判斷,使用者和隨機產生的數字之間的大小關係。因為需要使用者不斷猜測,所以第一個和第二個都是需要迴圈的。故第一次程式碼如下:

import random
num = random.randint(1, 100)
#print(num)
uinput = input("系統已經生成了一個1—100的數字,請輸入一個數字開始您的猜測:")
count = 1
while not uinput.isdecimal():
    uinput = input("您輸入的不是一個數字請重新輸入:")
    count += 1
else:
    while  int(uinput) != num:
        if int(uinput) > 100:
            uinput = input("您輸入數字超過範圍,請重新輸入:")
        elif int(uinput) > num:
            uinput = input("您輸入數字太大了,請重新輸入:")
        elif int(uinput) < num:
            uinput = input("您輸入數字太小了,請重新輸入:")
        count += 1
    else:
        print("恭喜你猜對了,答案就是", num, "您總共猜了", count, "次")

邏輯bug:就是隻要你進入第一個迴圈中else之後,你就再也不會進入第一個迴圈了,因為while.....else是while中的條件不符合時才進入的else的,也就是說一旦你進入了else,就不會再進入它的while了。所以只要你進入了第一個else後,使用者輸入的帶有字母之後,就會報字元s不能用Int()強制轉換的錯誤。至於怎麼改,由於這個邏輯限制,如果你再在while前面加判斷就會出現很多重複程式碼的地方。如果有大佬能幫改一下就十分感謝了。

第二次思路:

因為要不斷猜測,使用者猜測成功的時候遊戲結束(迴圈結束),直接一個無限迴圈加上,猜測成功就break;後面就直接if,elif,elif判斷即可。(先判斷的一定是是否是字元判斷,因為如果你把Int()強制轉換放前面if第二次進入迴圈的時候先會進行強制轉換,也會出現跟上個思路一樣的錯誤)

import random
num = random.randint(1, 100)
print(num)#測試
count = 0
uinput = input("系統已經生成了一個1—100的數字,請輸入一個數字開始您的猜測:")
while 1:
    count += 1
    if uinput.isdecimal() == False:
        uinput = input("您輸入的不是一個數字請重新輸入:")
    elif int(uinput) > 100:
        uinput = input("您輸入數字超過範圍,請重新輸入:")
    elif int(uinput) > num:
        uinput = input("您輸入數字太大了,請重新輸入:")
    elif int(uinput) < num:
        uinput = input("您輸入數字太小了,請重新輸入:")
    elif int(uinput) == num:
        print("恭喜你猜對了,答案就是", num, "您總共猜了", count, "次")
        break

這樣就不會出現錯誤了。

PS:第一次學習Python啊哈哈,寫的不好大家多有擔待,歡迎大家一起交流

另外的迴圈使用提醒:你的迴圈條件要有能繼續迴圈的語句,就比如此題中的判斷完後繼續input獲取輸入繼續判斷,你不加的話就無限迴圈了。還有計數,就是迴圈一次(你輸入一次)計數加一,最好是放在最外面,你也能在if後面加,這樣每個if後面都有了,還是有點複雜的吧。。。

邏輯思考:程式碼寫完除錯後若輸入條件有區別,要關注輸入順序(最好的是你根據你的邏輯在寫程式碼的時候就進行思考),就一定要把自己邏輯點抓好