新手刚学习编程,请大家给点思路,我写了个roll点的脚本,现在想让脚本在输入错误的的时候重新返回到第一步,不知道从哪里下手
https://gist.github.com/chengxiao/5393578
PHPz2017-04-17 11:26:32
看你的程式彷彿看到很多年之前的我自己 ... 猶豫良久還是決定要寫一下這個答案 ...
@greatghoul 的答案雖然被選了最佳但實際上並不是一個好答案 ...
在一個函數內部為了返回開始而調用自身 ... 從程式設計的角度講這就是一種模擬 goto
的行為 ...
但實際上這個模擬還不如 goto
... 因為它是一個遞歸 ... 輸入錯誤一定次數之後程式會出錯 ...
一個好的程序應該是結構化的 ... 有進有出 ... 所以我大概改了一下 ... 如下 ...
# 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"
思路很明確 ... 重複呼叫函數的動作發生在函數外部 ... 由函數的回傳值控制 ...
我很小的時候寫 GWBasic ... 唯一的流程控制是 goto ... 那是沒有辦法的事情 ...
現在程式語言和程式設計思想都極大的發展了 ... 近十幾年來大家都不用 goto 了 ... 你也不能落後不是 ..?
此外我順便提另一個問題 ... 你有註意到你做了很多重複的工作麼 ..?
程式裡面各種 split
... 各種 choice
... 一模一樣的 except
邏輯寫了兩次 ...
甚至連輸出的內容都重複打了很多次 ... 有想過用良好的程式結構來減少自己的輸入麼 ..?
讀我上面那段範例程式碼的同時也考慮一下這個問題 ... 不懂歡迎問 ... 關注點不要只留在循環上恩 ...
就是這樣啦 ...
PHP中文网2017-04-17 11:26:32
包裝到個函數中,錯誤時再呼叫一次就好啦。
# 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()