需要一个python脚本返回的思路,求分享,python脚本,新手刚学习编程,请大家给


新手刚学习编程,请大家给点思路,我写了个roll点的脚本,现在想让脚本在输入错误的的时候重新返回到第一步,不知道从哪里下手

https://gist.github.com/chengxiao/5393578

看你的程序仿佛看到很多年之前的我自己 ... 犹豫良久还是决定要写一下这个答案 ...

@greatghoul 的答案虽然被选了最佳但实际上并不是一个好答案 ...

在一个函数内部为了返回开始而调用自身 ... 从程序设计的角度讲这就是一种模拟 goto 的行为 ...

但实际上这个模拟还不如 goto ... 因为它是一个递归 ... 输入错误一定次数之后程序会出错 ...

一个良好的程序应该是结构化的 ... 有进有出 ... 所以我大概改了一下 ... 如下 ...

# today my lucky numberfrom random import choicedef 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 0while not controller():    print "Sorry,Please Enter /roll + number"

思路很明确 ... 重复调用函数的动作发生在函数外部 ... 由函数的返回值控制 ...

我在非常小的时候写 GWBasic ... 唯一的流程控制就是 goto ... 那是没有办法的事情 ...

现在编程语言和编程思想都极大的发展了 ... 近十几年来大家都不用 goto 了 ... 你也不能落后不是 ..?

此外我顺便提另一个问题 ... 你有注意到你做了很多重复的工作么 ..?

程序里面各种 split ... 各种 choice ... 一模一样的 except 逻辑写了两次 ...

甚至连输出的内容都重复打了很多次 ... 有想过用良好的程序结构来减少自己的输入么 ..?

读我上面那段示例代码的同时也考虑一下这个问题 ... 不懂欢迎问 ... 关注点不要只留在循环上恩 ...

就是这样啦 ...

第一反应想到用递归

把整个程序放入一个循环中
输入正确->跳出循环,程序结束
输入错误->执行循环,程序继续

包装到个函数中,错误时再调用一次就好啦。

# today my lucky numberfrom random  import choicedef 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  yrollit()

编橙之家文章,

评论关闭