需要一个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
- • 2019年3月最新消息: Python 3.4.10 现已推出
- • [上海]招Python量化系统开发工程师
- • 优集品网络科技有限公司招Python中/高级工程师
- • 爱因互动科技发展有限公司招募Python开发攻城狮
- • mozio招聘Python/Django工程师
- • Kavout金融科技公司招Python研发工程师
- • Python数组逆向输出,编程练习题实例四十
- • Python数组插入排序,编程练习题实例三十九
- • Python矩阵for循环应用,编程练习题实例三十八
- • Python操作Redis数据库方面的问题
- • 请python高手帮我看看这段python代码中函数setter的
- • Python什么方法可以快速将两个队列变成字典
必知PYTHON教程 Must Know PYTHON Tutorials
- • python 解释器
- • python idle
- • python dir函数
- • python 数据类型
- • python type函数
- • python 字符串
- • python 整型数字
- • python 列表
- • python 元组
- • python 字典
- • python 集合
- • python 变量
- • python print
- • python 函数
- • python 类定义
- • python import
- • python help
- • python open
- • python 异常处理
- • python 注释
- • python continue
- • python pass
- • python return
- • python global
- • python assert
- • python if语句
- • python break
- • python for循环
- • python while循环
- • python else/elif
- • lambda匿名函数
必知PYTHON模块 Must Know PYTHON Modules
- • os 模块
- • sys 模块
- • re 正则表达式
- • time 日期时间
- • pickle 持久化
- • random 随机
- • csv 模块
- • logging 日志
- • socket网络通信
- • json模块
- • urlparse 解析URL
- • urllib 模块
- • urllib2 模块
- • robotparser 解析
- • Cookie 模块
- • smtplib 邮件
- • Base64 编码
- • xmlrpclib客户端
- • string 文本
- • Queue 线程安全
- • math数学计算
- • linecache缓存
- • threading多线程
- • sqlite3数据库
- • gzip压缩解压
最新内容 NEWS
- • django app提供pv信息的方法是什么
- • Django项目版本升级如何操作?
- • django较多数据传递如何优雅的呈现
- • django1.7获取参数问题求助
- • Django1.7使用内置comment遇到问题
- • python mysql数据库做insert操作时报_mysql_ex
- • 关于python mysql的duplicate insert机制的疑问
- • pymongo使用insert函数批量插入被中断要怎么
- • Python程序员解决棘手问题的常用库
- • 求助关于restfull api接口几个问题
图文精华 RECOMMEND
-
django1.7获取参数问题求助
-
Python程序员解决棘手问题的常用库
-
求问str()同__str__原理上有什么不同
-
scrapy框架里面用link extractor怎么能
-
python {}.fromkeys创建字典append添加操
-
python3 类型Type str doesn't support th
热点文章 HOT
- 学习Python有什么好的书籍推荐?
- Python匿名函数 Lambda表达式作用
- Python与Java、C、Ruby、PHP等编程语言有什么
- Python 正则中文网页字符串提取问题
- 如何为实时性应用存取经纬度?django my
- 想用python做个客户端,在二维码登录这个地
- 有让IDE可识别Python函数参数类型的方法吗
- Python字符串转换成列表正则疑问