Crossin的编程教室
标题: 【Python 第22课】 函数应用示例 [打印本页]
作者: crossin先生 时间: 2014-4-24 18:22
标题: 【Python 第22课】 函数应用示例
前两课稍稍介绍了一下函数,但光说概念还是有些抽象了,今天就来把之前那个小游戏用函数改写一下。
我希望有这样一个函数,它比较两个数的大小。
如果第一个数小了,就输出“too small”
如果第一个数大了,就输出“too big”
如果相等,就输出“bingo”
函数还有个返回值,当两数相等的时候返回True,不等就返回False。
于是我们来定义这个函数:
def isEqual(num1, num2):
if num1<num2:
print 'too small'
return False
if num1>num2:
print 'too big'
return False
if num1==num2:
print 'bingo'
return True
这里说一下,return是函数的结束语句,return后面的值被作为这个函数的返回值。函数中任何地方的return被执行到的时候,这个函数就会结束。
然后在我们的小游戏里使用这个函数:
from random import randint
num = randint(1, 100)
print 'Guess what I think?'
bingo = False
while bingo == False:
answer = input()
bingo = isEqual(answer, num)
在isEqual函数内部,会输出answer和num的比较结果,如果相等的话,bingo会得到返回值True,否则bingo得到False,循环继续。
函数可以把某个功能的代码分离出来,在需要的时候重复使用,就像拼装积木一样,这会让程序结构更清晰。
作者: xiaohuzai 时间: 2015-3-3 09:38
我看您在写函数的时候,每个if语句是用分号;隔开,我在写函数的时候没有用分号,但是也能运行,请问这个有影响吗?- def isEqual(num1,num2):
- if num1<num2:
- print 'too small'
- return False
- if num1>num2:
- print 'too big'
- return False
- if num1==num2:
- print 'bingo'
- return True
复制代码
作者: crossin先生 时间: 2015-3-3 10:56
xiaohuzai 发表于 2015-3-3 09:38
我看您在写函数的时候,每个if语句是用分号;隔开,我在写函数的时候没有用分号,但是也能运行,请问这个有 ...
啊,那个分号是笔误,已改
作者: zzxomg 时间: 2015-3-12 21:55
- #coding:utf-8
- #猜数游戏2.0
- #zzx 2015.03.12
- print '-------------------------欢迎光临新新猜数游戏,猜中了有大奖哦!-------------------'
- print '规则:1-10的整数,随机一个'
- from random import randint
- num = randint(1,11)
- flag = True
- #比较两数是否相等
- def isEqual(input_num,num) :
- if input_num < num :
- print '您输入的数是:%d,小了哦' %input_num
- return True
- elif input_num > num :
- print '您输入的数是:%d,大了哦' %input_num
- return True
- elif input_num == num :
- print '您输入的的数是:%d,您很厉害啊,猜对了,亲亲!' %input_num
- return False
- #循环猜数
- while flag:
- input_num =int(raw_input('输入你心仪的数吧:'))
- flag = isEqual(input_num,num
复制代码
作者: catherinemic 时间: 2015-12-29 15:33
标题: 有意思,这样更简洁了~~ Crossin老师,能否再讲讲函数的结...
本帖最后由 catherinemic 于 2015-12-29 15:41 编辑
- def isEqual(num1,num2):
- if num1<num2:
- print 'Too small!'
- return False
- if num1>num2:
- print 'Too big!'
- return False
- if num1==num2:
- print 'BINGO!'
- return True
- print 'Guess what I think?'
- from random import randint
- num1=randint(1,100)
- bingo= False
- while bingo==False:
- answer=input()
- bingo=isEqual(answer,num1)
复制代码 有意思,这样更简洁了~~
Crossin老师,能否再讲讲函数的结束是什么意思呢,感觉就是返回一个值,前面也用到过函数,但是定义的时候并没有写return多少,只是print一些东西,那什么时候需要定义return,什么时候不需要呢?
-
Python10.png
(4.44 KB, 下载次数: 621)
作者: crossin先生 时间: 2015-12-30 15:40
catherinemic 发表于 2015-12-29 15:33
有意思,这样更简洁了~~
Crossin老师,能否再讲讲函数的结束是什么意思呢,感觉就是返回一个值,前面也用到 ...
你让函数做一件事,就是调用函数。
你让函数做一件事,完了告诉给你一个结果,就是调用带返回值的函数。
函数的返回值可以直接赋值给其它变量
作者: catherinemic 时间: 2015-12-31 11:15
crossin先生 发表于 2015-12-30 15:40
你让函数做一件事,就是调用函数。
你让函数做一件事,完了告诉给你一个结果,就是调用带返回值的函数。
...
调用带返回值的函数,明白啦,谢谢crossin老师~~
作者: jinss 时间: 2016-8-21 19:56
本帖最后由 jinss 于 2016-8-21 19:58 编辑
def isEqual(num1,num2):
if num1<num2:
print('too small')
return False;
if num1>num2:
print('too big')
return False
if num1==num2:
print('bingo')
return True
from random import randint
num=randint(1,100)
print('Guess what I think?')
bingo=False
while bingo==False:
answer=input()
bingo = isEqual(answer,num)
Guess what I think?
8
Traceback (most recent call last):
File "F:/python/py22_1.txt", line 17, in <module>
bingo = isEqual(answer,num)
File "F:/python/py22_1.txt", line 2, in isEqual
if num1<num2:
TypeError: unorderable types: str() < int() 为啥呀?
作者: crossin先生 时间: 2016-8-22 09:26
jinss 发表于 2016-8-21 19:56
def isEqual(num1,num2):
if num1num2:
print('too big')
你是python3吧,python3 input得到的是字符串,不能直接比较,要转换成数字
answer=int(input())
作者: jinss 时间: 2016-8-22 21:08
crossin先生 发表于 2016-8-22 09:26
你是python3吧,python3 input得到的是字符串,不能直接比较,要转换成数字
answer=int(input()) ...
是的!是的!谢谢老师!
作者: 枫叶落时 时间: 2017-8-12 22:52
from random import randint
Answer=randint(1,100)
totoal=11
left=0
num=0
time=0
well = False
print 'plese input the number you guess!!!'
while int(num) != Answer:
while time<totoal :
num=int(input());
time+=1
left=totoal-time
if num>Answer:
print 'too big,you have['+str(left)+']times'
elif num<Answer:
print 'too small,you have['+str(left)+']times'
elif num==Answer:
print 'congratulations you get it!'
time = time+(totoal-time)+1
else:
print 'sorry,you have get more then 3 time,can not try again!'
well = True
先生,这里是我在前面看到一位同学,我进行了一些优化,这个同学一开始不能使这段代码彻底结束,我优化以后,只有回答正确的答案才能结束,但是回答10次以后,却无法结束,修改了几次,都没办法。希望先生能给我一些指点
作者: crossin先生 时间: 2017-8-13 12:59
枫叶落时 发表于 2017-8-12 22:52
from random import randint
Answer=randint(1,100)
totoal=11
你想想逻辑,这里不是两层循环嵌套,只是一层循环,但要满足两个条件。
while的条件改一下
作者: 枫叶落时 时间: 2017-8-13 21:45
from random import randint
Answer = randint(1,100)
num = 0
time = 0
well = False
print " plese input the number you guess!!"
while num != Answer:
num = input()
time += 1
if num > Answer and time <10:
print " too big!"
elif num < Answer and time < 10:
print "too small"
elif num == Answer:
print "congratulations you get it!"
else :
print "sorry ,you have get more then 10 time,can not try agani!"
Answer = num
well = True
先生,听了你的意见,我成功优化,虽然没有用你23课所教的方法,自己想了一种,跑成功了,非常感谢先生~
作者: wwyy4ever 时间: 2018-2-2 15:37
请问老师,您给出的这段实例里,answer=input(),这个括号里面不能添加内容了吧
作者: crossin先生 时间: 2018-2-2 18:45
wwyy4ever 发表于 2018-2-2 15:37
请问老师,您给出的这段实例里,answer=input(),这个括号里面不能添加内容了吧 ...
可以添加,添加的内容是输入前的提示语
作者: wwyy4ever 时间: 2018-2-5 10:16
crossin先生 发表于 2018-2-2 18:45
可以添加,添加的内容是输入前的提示语
我就在括号里写了‘请输入数字’,然后不管输入什么数字都是too big
作者: crossin先生 时间: 2018-2-5 14:40
wwyy4ever 发表于 2018-2-5 10:16
我就在括号里写了‘请输入数字’,然后不管输入什么数字都是too big
输入的数字不要加引号
作者: Tmyueee 时间: 2018-2-23 11:14
MAC 3.6.4
def isEqual(num1,num2):
if num1<num2:
print('too small')
return False
if num1>num2:
print('too big')
return False
if num1==num2:
print('bingo')
return True
from random import randint
num = randint(1,100)
print ('Guess what I think?')
bingo = False
while bingo == False:
answer = int(input())
bingo = isEqual(answer,num)
然后 Run Module
"invalid character in identifier"
最后的num被框红了
不知道该怎么办
作者: TED 时间: 2018-2-23 17:31
Tmyueee 发表于 2018-2-23 11:14
MAC 3.6.4
def isEqual(num1,num2):
标识符中有无效字符,标红num说明在num附近,刚粘贴你代码试了下,num前的逗号改成英文字符就行了
参考链接 http://blog.csdn.net/yeyue0922/a ... tionNum=6&fps=1
作者: 司南 时间: 2018-4-5 21:47
- import random
- num=random.randint(1,5)
- guess=eval(input('guess what I think?'))
- def compare(x,y):
- if x<y:
- print('%d is too small' %x)
- elif x>y:
- print('%d is too big' %x)
- else:
- print('bingo')
- return x==y
- while num!=guess:
- compare(guess,num)
- guess=eval(input('guess what I think?'))
- else:
- print('bingo')
复制代码 老师您好,有个问题想请教您,感觉最后的else怪怪的,但又不知道,一旦没有这个else,如果在x=y时,print一个bingo
之前一直在贴吧跟您学习,但不知道为啥,被系统永远封禁了,所以转战到这里。
作者: crossin先生 时间: 2018-4-6 00:06
司南 发表于 2018-4-5 21:47
老师您好,有个问题想请教您,感觉最后的else怪怪的,但又不知道,一旦没有这个else,如果在x=y时,print一 ...
这样用else也没错
不用这个else,直接顶格 print ,也可以同样效果
作者: 司南 时间: 2018-4-6 10:14
crossin先生 发表于 2018-4-6 00:06
这样用else也没错
不用这个else,直接顶格 print ,也可以同样效果
多谢老师,试过之后果然如此,只要num!=guess,那么就会一直执行while循环,直到二者相等,才会结束循环,执行后面的print。
作者: iris 时间: 2018-5-11 21:01
请问,我的为什么直接一个数字就结束,不知道问题出在哪里?
作者: crossin先生 时间: 2018-5-11 22:14
return True
或者
return False
别加引号。原因看 bool类型转换 那课
欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) |
Powered by Discuz! X2.5 |