你第三次的輸入其實是你第二次迴圈就問了,所以第三次的結果只是存到message裡面而已根本沒經過判斷式。
把for迴圈裡面if跟elif的message提出來到if前面並且把range改成(1, 4)就可以了,因為要打中文太麻煩了所以我以英文為例:
for i in range(1,4):
message=input("1~10, 3 times >>")
if (float(message)>a):
print("lower, have {} times".format(3-i))
elif(float(message)<a):
print("higher, have {} times".format(3-i))
else:
print("you got it")
2020-10-146 樓
小明 (jackywu15@gmail.com)
像這樣
2020-10-147 樓
Ming (dk22069@gmail.com)
%pylab inline
print("猜數字(範圍1~10)")
y=int(randint(1,11))
while True:
x=int(input("請輸入數字:"))
if (x<=0 or x>=11):
print("Wrong")
continue
elif y<x:
print("再小一點")
from random import randint
x = randint(1, 101)
i = 0
n = 100
q = 0
while i < 100:
z = float(input(">> "))
if z == x:
print("bingo")
elif z > x :
print(str(z) +"至" + str(min(q,n)))
n = z
elif z < x:
print(str(z) + "至" + str(max(q,n)))
q = z
i = i + 1
%pylab inline
ans = input(">> ")
for i in range(1):
k = randint(1, 10)
if int(ans) < k:
print("it's bigger")
elif int(ans) > k:
print("it's smaller")
else:
print("correct!")
我的版本↑,但是不知道怎麼將猜錯的答案可以繼續猜下去...
2020-07-303 樓
小明 (jackywu15@gmail.com)
Patrick你的for迴圈只有一次,想要一直做下去應該使用while或是把for的range設大一點
例如for i in range(1,10)。
另外你的k也應該要移出到for迴圈之前,ans要移到for迴圈跟if迴圈之間。
最後在else印完correct後要給一個break,否則迴圈會在答對之後繼續跑下去
我稍微把你的程式修改了一下分別以for跟while的方式實作,如圖
%pylab inline
target=randint(1,100)
temp=input("猜數字遊戲, 可以猜10次, 數字在1~100間的整數, 我會給提示, 請猜猜看 >> ")
guess_number=int(temp)
garbage_word=["渣","廢","再努力也沒有用","混","#@%!"]
for i in range(1,11):
if guess_number>target :
temp=input(f"你猜的數字太大了, 你已經猜了{i}次, 真是{garbage_word[randint(len(garbage_word))]}, 再猜猜看 >> " )
guess_number=int(temp)
elif guess_number<target :
temp=input(f"你猜的數字太小了, 你已經猜了{i}次, 真是{garbage_word[randint(len(garbage_word))]}, 再猜猜看 >> " )
guess_number=int(temp)
else :
print(f"你猜對了, 共猜了{i}次, 天才啊!")
break
ans = randint(1, 101)
guess = eval(input("Guess a number between 1~100: "))
while (guess != ans):
if (guess > ans):
print("太大了")
guess = eval(input("Guess again: "))
elif (guess < ans):
print("太小了")
guess = eval(input("Guess again: "))
print("Bingo!")
%pylab inline
a = randint(1,31)
#取1~30內的亂數答案
m = int(input("猜數字遊戲,範圍1~30的整數。一共有3次機會\n請在此輸入整數>> "))
#設答題者輸入的答案為m,並將輸入的答案字串str轉為整數int
for b in range(1,3): #徊圈2次,加上開頭1次給到答題者總共3次機會
if (m != a): #若輸入的數字不等於答案,則執行if條件
print("猜錯了,剩下{}次機會".format(3 - b))
#提示替減顯示3->2->1
m = int(input("猜數字遊戲,範圍1~30的整數。一共有3次機會\n請在此輸入整數>> "))
#讓答題者答錯時重新輸入答案,m不能是str,不然答案永遠不對...
else:
print("\n恭喜答對,88!")
break
#答對時直接結束徊圈,不然會跑2次else...
if (a != m):
print("\n遊戲結束!\n很可惜,答案是\n{}".format(a))
#若答錯3次遊戲結束,並公布答案
問題圖檔上面是我用 if, elif, else 做條件判斷,但假如在第三次答對答案的情況下,"恭喜答對啦!!" 這句話會被吃掉不見。
我把三個判斷都直接改用 if 後,這個問題就解決了。
但我想問一下這兩種寫法有什麼邏輯上的盲點嗎?怎麼會出現這種奇怪的問題。
把for迴圈裡面if跟elif的message提出來到if前面並且把range改成(1, 4)就可以了,因為要打中文太麻煩了所以我以英文為例:
for i in range(1,4):
message=input("1~10, 3 times >>")
if (float(message)>a):
print("lower, have {} times".format(3-i))
elif(float(message)<a):
print("higher, have {} times".format(3-i))
else:
print("you got it")
print("猜數字(範圍1~10)")
y=int(randint(1,11))
while True:
x=int(input("請輸入數字:"))
if (x<=0 or x>=11):
print("Wrong")
continue
elif y<x:
print("再小一點")
elif x>y:
print("再大一點")
else:
print("Right")
break
x = randint(1, 101)
i = 0
n = 100
q = 0
while i < 100:
z = float(input(">> "))
if z == x:
print("bingo")
elif z > x :
print(str(z) +"至" + str(min(q,n)))
n = z
elif z < x:
print(str(z) + "至" + str(max(q,n)))
q = z
i = i + 1
message=""
a=randint(1,10)
while(message!=a):
message=int(input("猜數字喔 >>"))
if (int(message) > 5):
print("{} ~ 10 之間".format(message))
print("---{}---偷看答案".format(a))
else:
print("{} ~ 5 之間".format(message))
print("---{}---偷看答案".format(a))
print("Bingo")
沒有做完全僅參考喔~~
但while迴圈跟if迴圈都在我猜到一定數量(3~5個)的時候自動停止迴圈
一直沒辦法跑到遊戲結束
不知道為什麼會這樣...
ans = input(">> ")
for i in range(1):
k = randint(1, 10)
if int(ans) < k:
print("it's bigger")
elif int(ans) > k:
print("it's smaller")
else:
print("correct!")
我的版本↑,但是不知道怎麼將猜錯的答案可以繼續猜下去...
例如for i in range(1,10)。
另外你的k也應該要移出到for迴圈之前,ans要移到for迴圈跟if迴圈之間。
最後在else印完correct後要給一個break,否則迴圈會在答對之後繼續跑下去
我稍微把你的程式修改了一下分別以for跟while的方式實作,如圖