玩蛇网提供最新Python编程技术信息以及Python资源下载!

需要一个python脚本返回的思路,求分享

新手刚学习编程,请大家给点思路,我写了个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()

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd20263.html

相关文章 Recommend

玩蛇网Python互助QQ群,欢迎加入-->: 106381465 玩蛇网Python新手群
修订日期:2017年05月24日 - 14时31分31秒 发布自玩蛇网

您现在的位置: 玩蛇网首页 > Python问题解答 > 正文内容
我要分享到:

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules