猜数字游戏python程序用函数guesssecret_Python-三、函数

3.1 def语句和参数

def ...(...)语句用于定义一个函数,以便后面调用函数,如:

def hello(name): #定义函数hello,变元name

print('hello' + name) #打印hello+变元name

namein = input() #定义namein变量,从键盘取值并赋给namein

hello(namein) #调用hello函数,将namein的变量赋值给变元name。

需注意:函数被调用并返回后,在变元中的值就丢失了。

3.2 返回值和return语句

def语句创建函数时,可以用return语句指定应该返回什么值,如

import random

def getAnswer(answerNumber): #定义一个函数getAnswer,变元answerNumber

if answerNumber == 1:

return 'It is certain' #当变元为1时,打印这个结果,下述同理。

elif answerNumber == 2:

return 'It is decidedly so'

elif answerNumber == 3:

return 'Yes'

elif answerNumber == 4:

return 'Reply hazy try again'

elif answerNumber == 5:

return 'Ask again later'

elif answerNumber == 6:

return 'Concertrate and ask again'

elif answerNumber == 7:

return 'My reply is no'

elif answerNumber == 8:

return 'Outlook not so good'

elif answerNumber == 9:

return 'Very doubtful'

r = random.randint(1, 9) #定义变量r,调用内建函数random,其范围是1到9

fortune = getAnswer(r) #运行自建函数getAnswer,变元值为r。

print(fortune) #打印fortune中的存储结果

3.3 None值

None表示没有值,是NoneType数据类型的唯一值。

注意,print()函数是没有返回值的,与none值相同。

可以通过:

spam = print('Hello')

None == spam

#返回结果为True得出。

3.4关键字参数和print()

关键字是由在调用函数时选用的,通常用于可选变元。

如print中的 end、, 、seq函数。

#end=''

print('Hello',end=' ')

print('World')

结果→→Hello World

# ','

print('Cat','Dog','Mice')

结果→→Cat Dog Mice

# seq = ''

print('Cat','Dog','Mice',sep=',')

结果→→Cat,Dog,Mice

3.5 局部和全局作用域

全局指在本程序中一直生效,局部是指在程序的某一个局部中生效,如果退出局部则失效。

def spam():

eggs = 99 #局部变量1

bacon() #此处局部变量2会被打印,对于spam()来说,这里就是局部

print(eggs) #此处打印结果为99,因为bacon()执行后,bacon()中的局部变量失效了

def bacon():

ham = 101

eggs = 0 #局部变量2

spam()

bacon()

全局变量可以和局部变量重名,但我们尽量让他们之间不要重名。

***

def spam():

print(eggs)

eggs = 42 #全局变量1

spam()

print(eggs)

上代码中的局部变量eggs在

打印时引用了全局变量。

总结:全局会被局部引用,局部不会被全局引用,要想运行轻松点,就要注意别重名啦。

3.6 global语句

为函数命名时加上global语句如“global eggs = 1”,就可以让python知道在这代码全局中所有的eggs函数都值都为1。

函数中一个人变量要么总是全局变量,要么总是局部变量。

3.7 异常处理

由于你不知道用户输入的变元是什么,所以你需要在他们执行前执行一次检查,以免程序直接出错跳出。

#CODE

def spam(divideBy):

try:

return 42 / divideBy

except ZeroDivisionError:

print('错误:无效输入')

print(spam(2))

print(spam(12))

print(spam(0))

print(spam(1))

#OUTPUT

21.0

3.5

错误:无效输入

None

42.0

3.8 猜数字游戏

#This is a guess number game.

import random

SecretNumber = random.randint(1,20)

print('I have a number, come on and guess.')

#print('PLZ enter a number.')

#Ask the player to guess 6 times.

for guessesTaken in range(1,7):

print('PLZ enter a number.')

guess = int(input())

if guess < SecretNumber:

print('Your number is too low.')

elif guess > SecretNumber:

print('Your number is too high.')

else:

break # This condition is the correct guess!

if guess == SecretNumber:

print('Good job! You guessed my number in ' + str(guessesTaken) + ' times.')

else:

print('Nope. The number I was thinking of was ' + str(SecretNumber))

3.9 本章习题

1.为什么在程序中加入函数会有好处?

函数快,可以消除重复,让代码更短,读起来也更容易。

2.函数中的代码何时执行:在函数被定义时,还是在函数被调用时?

在函数被调用时执行。

3.什么语句创建一个函数?

def语句创建函数。

4.一个函数和一次函数调用有什么区别?

函数是一个开头为def的语句,它包含函数名和函数体。如def guess()

而函数之后的guess()是一次函数调用,只有当代码执行到guess()时,才会调用函数def guess()下面的函数体。

5.Python 程序中有多少全局作用域?有多少局部作用域?

在调用函数时,创建了一个全局作用域和一个局部作用域。

6.当函数调用返回时,局部作用域中的变量发生了什么?

清空。

7.什么是返回值?返回值可以作为表达式的一部分吗?

返回值即函数执行结束后的返回结果,他可以作为表达式的一部分。

8.如果函数没有返回语句,对它调用的返回值是什么?

None

9.如何强制函数中的一个变量指的是全局变量?

global xxx 则 xxx 被强制为一个全局变量。

10.None 的数据类型是什么?

none.type

11.import areallyourpetsnamederic 语句做了什么?

导入了一个名为areallyourpetsnamederic的函数,

12.如果在名为 spam 的模块中,有一个名为 bacon()的函数,在引入 spam 后,如何调用它?

spam.bacon()

13.如何防止程序在遇到错误时崩溃?

try

except

函数进行验证

14.try 子句中发生了什么?except 子句中发生了什么?

try句子中运行了你的表达式,如果产生错误,则转到except。

之后程序照常运行。

3.11 代码实践

3.11.1

编写一个名为 collatz()的函数,它有一个名为 number 的参数。如果参数是偶数,那么 collatz()就打印出 number // 2,并返回该值。如果 number 是奇数,collatz()就打印并返回 3 * number + 1。

然后编写一个程序,让用户输入一个整数,并不断对这个数调用 collatz(),直到函数返回值1(令人惊奇的是,这个序列对于任何整数都有效,利用这个序列,你迟早会得到 1!既使数学家也不能确定为什么。你的程序在研究所谓的“Collatz序列”,它有时候被称为“最简单的、不可能的数学问题”)。

记得将 input()的返回值用 int()函数转成一个整数,否则它会是一个字符串。 提示 如果 number % 2 == 0,整数 number 就是偶数,如果 number % 2 == 1,它就是奇数。

这个程序的输出看起来应该像这样:

Enter number:

3

10

5

16

8

4

2

1

def collatz(dd):

global number

number = dd

while number != 1:

if number % 2 == 0:

number = number // 2

print(number)

elif number % 2 == 1:

number = number * 3 + 1

print(number)

3.11.2

在前面的项目中添加 try 和 except 语句,检测用户是否输入了一个非整数的字符串。正常情况下,int()函数在传入一个非整数字符串时,会产生 ValueError 错误,比如 int('puppy')。在 except 子句中,向用户输出一条信息,告诉他们必须输入一个整数。

try:

nm1 = int(input('请输入一个数字\n'))

except ValueError:

print('请输入正确的数字!')

else:

print(collatz(nm1))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/552549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 命令行参数 _java命令行参数

原标题&#xff1a;java命令行参数命令行参数就是main方法里面的参数String[] args他就是一个数组&#xff0c;args只是数据类型的一个名称&#xff0c;就是一个数组的变量&#xff0c;名称无所谓&#xff0c;类型没变就行了。这个就是程序的入口点。如图7.4所示&#xff1a;图…

java 最小生成树_图的最小生成树(java实现)

1.图的最小生成树(贪心算法)我两个算法的输出都是数组表示的&#xff0c;当前的索引值和当前索引对应的数据就是通路&#xff0c;比如parent[2] 5;即2和5之间有一个通路&#xff0c;第二个可能比较好理解&#xff0c;第一个有点混乱是什么&#xff1f;将一个有权图中的 所有顶…

中文分词工具 java_java读取中文分词工具(一)

import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.RandomAccessFile;import java.util.StringTokenizer;/** 文本格式&#xff1a;已分词的中文文本&#xff0…

java中的成员变量和局部变量的区别_java中成员变量与局部变量区别分析

本文实例分析了java中成员变量与局部变量区别。分享给大家供大家参考。具体分析如下&#xff1a;成员变量&#xff1a;在这个类里定义的私有变量&#xff0c;属于这个类。创建以及使用成员变量public class Person {String name;String Sex;int age;double Height;public stati…

java 自定义注解 生成json_用自定义注解实现fastjson序列化的扩展

这篇文章起源于项目中一个特殊的需求。由于目前的开发方式是前后端分离的&#xff0c;基本上是通过接口提供各个服务。而前两天前端fe在开发中遇到了一些问题&#xff1a;他们在处理字符串类型的时间时会出现精度丢失的情况&#xff0c;所以希望后台是以时间戳的形式返回给前端…

工厂模式 java场景_研磨设计模式之简单工厂模式(场景问题)

简单工厂不是一个标准的设计模式&#xff0c;但是它实在是太常用了&#xff0c;简单而又神奇&#xff0c;所以还是需要好好掌握的&#xff0c;就当是对学习设计模式的热身运动吧。为了保持一致性&#xff0c;我们尽量按照学习其它模式的步骤来进行学习。1 场景问题大家都知道&…

java asm jndi_GitHub - Q1ngShan/JNDI: JNDI 注入利用工具

JNDI 注入利用工具介绍本项目为 JNDI 注入利用工具&#xff0c;生成 JNDI 连接并启动后端相关服务&#xff0c;可用于 Fastjson、Jackson 等相关漏洞的验证。本项目是基于 welk1n 的 JNDI-Injection-Exploit&#xff0c;在此项目的基础服务框架上&#xff0c;重新编写了攻击利用…

java保存登录信息_java – 保存登录详细信息(首选项)android

我有一个具有登录,注销功能的Android应用程序.登录表单包含用户名和密码以及登录按钮.我想在用户选中“记住我”复选框时保存用户名和密码.我的project.java文件如下所示&#xff1a;public class project extends Activity {private static final int IO_BUFFER_SIZE 4 * 102…

java堆和非堆_java 堆与非堆 内存

堆(Heap)和非堆(Non-heap)内存按照官方的说法&#xff1a;“Java 虚拟机具有一个堆&#xff0c;堆是运行时数据区域&#xff0c;所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主…

java中fis和fos_java中-的流-与操作

/*字节输出流 OutputStrema&#xff1a;* OutputStream抽象类* write(int b); 将指定的字节写入此流中* write(byte[] b); 将指定的数组 输入此流中* write(byte[] b , int a , int c); 将指定的数组输入此流中 从a索引开始 获取c 个* close(); 将此流关闭 并释放资源* fl…

java 上传文件及预览_SpringBoot上传下载文件及在线预览

SpringBoot上传下载文件及在线预览今天大概就说说如何使用SpringBoot进行上传和下载以及在线预览文件 本篇主要介绍上传下载的功能&#xff0c;对于界面就简单一点&#xff0c;大致如下&#xff1a;一、老规矩还是先看看小项目的目录结构&#xff1a;二、添加对应的pom依赖org.…

yolov4用1050ti_简单粗暴的多目标跟踪神器 – DeepSort

目标跟踪问题一直是计算机视觉的热点任务之一&#xff0c;简单的可以分为单目标跟踪与多目标跟踪&#xff0c;最常见的目标跟踪算法都是基于检测的跟踪算法&#xff0c;首先发现然后标记&#xff0c;好的跟踪算法必须具备REID的能力。今天小编斗胆给大家推荐一个结合传统算法跟…

java 数据库语句_java连接各数据库的语句

1、Oracle8/8i/9i数据库(thin模式)Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();String url"jdbc:oracle:thin:localhost:1521:orcl";//orcl为数据库的SIDString user"test\";String password"test";Connection c…

alm数据库mysql_mysql

1. mysql启动mysqld --console2. mysql关闭mysqladmin shutdown -uroot -proot3. 免安装mysql配置&#xff1a;启动mysql&#xff1a; mysqld --skip-grant-tables(跳过安全校验)&#xff0c; 修改mysql.user表里面的数据&#xff0c;最后flush privileges;mysql jdbc连接代码…

类java的步骤_java类加载的过程

类加载就是三个过程&#xff1a;加载、链接、初始化链接又可以分为验证、准备、解析1.加载将class字节码文件通过类加载器装入内存中2.验证确保当前class文件的字节流所包含的内容符合当前JVM的规范要求&#xff0c;并且不会出现危害JVM自身安全的代码&#xff0c;当前字节流不…

java拓展接口_Java拓展接口-default关键词

Java接口在使用过程中有两点规定&#xff1a;1、接口中只能有定义方法名、方法返回类型&#xff0c;不能有方法的实现。2、实现接口的类&#xff0c;必须实现接口中所有的方法。例如下面的例子&#xff1a;//定义接口public interface Action {//接口中的方法定义&#xff0c;只…

java编写通信录管理系统_Java 实现通讯录管理系统教程

本文实例为大家分享了java实现通讯录管理系统的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下完成项目的流程&#xff1a;1.根据需求&#xff0c;确定大体方向2.功能模块分析3.界面实现4.功能模块设计5.coding6.代码测试下面是源代码&#xff1a;import java.awt.Co…

java姑娘_初识java这个小姑娘(二)

正版疯狂java讲义第5版编程教材76.5元(需用券)去购买 >妙解垃圾回收机制周一&#xff0c;早高峰&#xff01;&#xff01;&#xff01;五个字&#xff0c;说尽心中的绝望&#xff01;&#xff01;&#xff01;一段考验一个人耐力、智力、开车技术以及脾气的路。 我把车开进了…

JAVA script 循环 图片_深入分析JavaScript 事件循环(Event Loop)

事件循环(Event Loop)&#xff0c;是每个JS开发者都会接触到的概念&#xff0c;但是刚接触时可能会存在各种疑惑。众所周知&#xff0c;JS是单线程的&#xff0c;即同一时间只能运行一个任务。一般情况下这不会引发问题&#xff0c;但是如果我们有一个耗时较多的任务&#xff0…

mysql update 跳过重复_MySQL通过UPDATE / DELETE整合重复的数据记录

我有一个看起来像这样的表&#xff1a;mysql> SELECT * FROM Colors;╔════╦══════════╦════════╦════════╦════════╦════════╦════════╦════════╗║ ID ║ USERNAME ║ RED ║ GREEN ║ YELLOW ║ …