新手刚学习编程,请大家给点思路,我写了个roll点的脚本,现在想让脚本在输入错误的的时候重新返回到第一步,不知道从哪里下手
https://gist.github.com/chengxiao/5393578
看你的程序仿佛看到很多年之前的我自己 … 犹豫良久还是决定要写一下这个答案 …
@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
逻辑写了两次 …
甚至连输出的内容都重复打了很多次 … 有想过用良好的程序结构来减少自己的输入么 ..?
读我上面那段示例代码的同时也考虑一下这个问题 … 不懂欢迎问 … 关注点不要只留在循环上恩 …
就是这样啦 …
包装到个函数中,错误时再调用一次就好啦。
# 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()
把整个程序放入一个循环中
输入正确->跳出循环,程序结束
输入错误->执行循环,程序继续
第一反应想到用递归
正文完