# 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
逻辑写了两次 ...甚至连输出的内容都重复打了很多次 ... 有想过用良好的程序结构来减少自己的输入么 ..?
读我上面那段示例代码的同时也考虑一下这个问题 ... 不懂欢迎问 ... 关注点不要只留在循环上恩 ...
就是这样啦 ...
包装到个函数中,错误时再调用一次就好啦。
把整个程序放入一个循环中
输入正确->跳出循环,程序结束
输入错误->执行循环,程序继续
第一反应想到用递归