# today my lucky number
from random import choice
def roll( x, y ):
return choice( range( x, y ) )
def controller():
a = raw_input( "Please enter /roll + number : " )
try:
if "/roll" == a:
x, y = 0, 100
elif "-" in a:
b = a.split()[1].split( "-" )
x, y = int( b[0] ), int( b[1] );
if ( x > y ) : x, y = y, x
++ y
else:
x, y = 0, int( a.split()[1] )
print "Today Your Lucky Number Is %s" % roll( x, y )
raw_input( "Enter anykey to Exit !" )
return 1
except ( ValueError, IndexError ):
return 0
while not controller():
print "Sorry,Please Enter /roll + number"
# today my lucky number
from random import choice
def rollit():
a =raw_input("Please enter /roll + number :")
if a.startswith("/roll") :
if a == "/roll":
print "Today Your Lucky Number Is %s"% roll(100)
raw_input("Enter anykey to Exit !")
elif "-" in a:
try:
b = a.split(" ")[1]
c =b.replace("-"," ").split()[0]
d =b.replace("-"," ").split()[1]
if int(c)>int(d):
print choice(range(int(d),int(c)+1))
elif int(c)<int(d):
print choice(range(int(c),int(d)+1))
except ValueError:
print "Sorry,Please Enter /roll + number"
raw_input("Enter anykey to Exit !")
else:
try:
b = a.split(" ")[1]
c = int(b)
print "Today Your Lucky Number Is %s"% roll(c)
raw_input("Enter anykey to Exit !")
except ValueError:
print "Sorry,Please Enter /roll + number"
raw_input("Enter anykey to Exit !")
else:
print "Sorry,Please Enter /roll + number!"
rollit()
def roll(c):
y = choice(range(c))
return y
rollit()
看你的程式彷彿看到很多年之前的我自己 ... 猶豫良久還是決定要寫一下這個答案 ...
@greatghoul 的答案雖然被選了最佳但實際上並不是一個好答案 ...
在一個函數內部為了返回開始而調用自身 ... 從程式設計的角度講這就是一種模擬
goto
的行為 ...但實際上這個模擬還不如
goto
... 因為它是一個遞歸 ... 輸入錯誤一定次數之後程式會出錯 ...一個好的程序應該是結構化的 ... 有進有出 ... 所以我大概改了一下 ... 如下 ...
思路很明確 ... 重複呼叫函數的動作發生在函數外部 ... 由函數的回傳值控制 ...
我很小的時候寫 GWBasic ... 唯一的流程控制是 goto ... 那是沒有辦法的事情 ...
現在程式語言和程式設計思想都極大的發展了 ... 近十幾年來大家都不用 goto 了 ... 你也不能落後不是 ..?
此外我順便提另一個問題 ... 你有註意到你做了很多重複的工作麼 ..?
程式裡面各種
split
... 各種choice
... 一模一樣的except
邏輯寫了兩次 ...甚至連輸出的內容都重複打了很多次 ... 有想過用良好的程式結構來減少自己的輸入麼 ..?
讀我上面那段範例程式碼的同時也考慮一下這個問題 ... 不懂歡迎問 ... 關注點不要只留在循環上恩 ...
就是這樣啦 ...
包裝到個函數中,錯誤時再呼叫一次就好啦。
把整個程式放入一個循環中
輸入正確->跳出循環,程式結束
輸入錯誤->執行循環,程式繼續
第一個反應想到用遞迴