编写一个名为collatz()的函数,它有一个名为number的参数:

如果参数是偶数,那么collatz()就打印出number//2,并返回该值;

如果number是奇数,那么collatz()就打印,并返回3*number+1。

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

注意:记得将input()的返回值用int()函数转成一个整数,否则它会是一个字符串。

提示:如果number%2==0,整数number就是偶数,如果number%2==1,它就是奇数。

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

  1. Enter number: 3
  2. 3
  3. 10
  4. 5
  5. 16
  6. 8
  7. 4
  8. 2
  9. 1

我的程序如下:

#-*- coding:utf-8 -*-
def collatz(number):
if number % 2 ==0:
return number//2
elif number % 2 == 1:
return number*3+1
else:
print('error') while True:
keyinput = int(input())
getnum = collatz(keyinput)
print(getnum)
if getnum == 1:
break 

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

改进代码如下:

# -*- coding:utf-8 -*-
def collatz(number):
if number % 2 ==0:
return number//2
elif number % 2 == 1:
return number*3+1
else:
print('error') while True:
try:
keyinput = int(input())
getnum = collatz(keyinput)
print(getnum)
if getnum == 1:
break
except ValueError:
print('you must input a int number')
运行结果如下:

但有一点,不对的地方是Collatz 序列是输入一个任意的整数,让计算机去默认执行,不再输入,知道出现1执行结束。

所以看到网上的人的做法,对我的代码进行改进之后。

改进代码如下:

  1. import sys
  2. def collatz(number):
  3. print(number)
  4. if number == 1:
  5. sys.exit()
  6. elif number % 2 == 1 :
  7. t=number*3+1
  8. collatz(t)
  9. else:
  10. t=number//2
  11. collatz(t)
  12. if __name__=='__main__':
  13. n=input('Enter number: ')
  14. try:
  15. n=int(n)
  16. collatz(n)
  17. except ValueError as verror:
  18. print('ValueError: You need input digital.') (注:此处代码是借鉴他人代码。)

Python3:Collatz 序列(考拉咨猜想)的更多相关文章

  1. Python实现Collatz序列(考拉兹猜想)

    考拉兹猜想(英语:Collatz conjecture),又称为奇偶归一猜想.3n+1猜想.冰雹猜想.角谷猜想.哈塞猜想.乌拉姆猜想或叙拉古猜想,是指对于每一个正整数,如果它是奇数,则对它乘3再加1, ...

  2. Collatz 序列、逗号代码、字符图网格

    1.collatz序列 编写一个名为 collatz()的函数,它有一个名为 number 的参数.如果参数是偶数, 那么 collatz()就打印出 number // 2,并返回该值.如果 num ...

  3. 2015年网易考拉海淘android面试

    经朋友推荐,昨天下午去网易杭州公司参加了考拉海淘android客户端的面试.今天回忆一下面试题目,做个整理进行备案. 1.说说JVM垃圾回收机制. 1.1.画了JVM分代回收的图,大致说了下垃圾分代回 ...

  4. 关于rem的使用和less编译工具考拉

    前提: 1.使用rem的前提是首先要设置好页面的根节点的大小: <script> (function(){ var html = document.documentElement; var ...

  5. DISC社交风格测试题--老虎 孔雀 考拉 猫头鹰

    凭直觉,迅速回答 "我是谁",而不是"我应该是谁,或我想我是谁". 1.关于人生观,我的内心其实是: A 希望能够有尽量多的人生体验,所以会有非常多样化的想法. ...

  6. megalo -- 网易考拉小程序解决方案

    megalo 是基于 Vue 的小程序框架(没错,又是基于 Vue 的小程序框架),但是它不仅仅支持微信小程序,还支持支付宝小程序,同时还支持在开发时使用更多 Vue 的特性. 背景 对于用户而言,小 ...

  7. python实践项目—Collatz序列

    Collatz序列题意说明 编写一个名为collatz()的函数,它有一个名为number 的参数.如果参数是偶数,那么collatz()就打印出number // 2,并返回该值.如果number ...

  8. 网易考拉Android客户端网络模块设计

    本文来自网易云社区 作者:王鲁才 客户端开发中不可避免的需要接触到访问网络的需求,如何把访问网络模块设计的更具有扩展性是每一个移动开发者不得不面对的事情.现在有很多主流的网络请求处理框架,如Squar ...

  9. 考拉Android统一弹框

    作者:钱成杰 背景 在快速开发的背景下,经历了n个版本后的考拉Android App中已经存在了各种各样看似相同却各有差别的弹框样式.其中包括系统弹框和自定义弹框,并且在线上时常会出现IllegalA ...

随机推荐

  1. css 字体库和动画

    @font-face { font-family:'WebSymbols'; src: url('../font/WebSymbols-Regular.otf'); } .icon{ font-fam ...

  2. 服务端相关知识学习(二)之Zookeeper可以干什么

    Zookeeper主要可以干哪些事情 配置管理,名字服务,提供分布式同步以及集群管理.那这些服务又到底是什么呢?我们为什么需要这样的服务?我们又为什么要使用Zookeeper来实现呢,使用Zookee ...

  3. O046、掌握Cinder 的设计思想

    参考https://www.cnblogs.com/CloudMan6/p/5578673.html   从 volume  创建流程看 cinder-* 子服务如何协同工作   对于 Cinder  ...

  4. 转:git上传本地项目到github

    转自:https://blog.csdn.net/Lucky_LXG/article/details/77849212 将本地项目上传到Github(两种简单.方便的方法) 一.第一种方法:首先你需要 ...

  5. js弹窗返回值详解(window.open方式)

    今天在改公司一个老系统时,碰到了window.open()的这个语法.虽然这个方法有点老,不太用了.所以有点不清楚父级弹框如何获取子级页面返回的值.为了解决这个问题,上网搜了一下.原作者参考网址:ht ...

  6. webpack配置不同打包配置

    生成环境与开发环境打包配置 使用package.json配置npm run开启不同的打包配置 ...webpack基本使用最后一篇博客 在上一篇博客中详细的演示了webpack开启本地服务和热更新,这 ...

  7. ubuntu - 14.10,解决按照最新版Gnome 15.10后,经典Gnome桌面字体问题!

    ubuntu14.10刚安装完毕,我首先按照了经典Gnome桌面,随后我发现ubuntu软件中心里面能找到的软件明显不如先前我安装过的ubuntu了,我觉得有可能是因为我以前安装的ubuntu14.1 ...

  8. SmartBinding与kbmMW#2

    前言 在之前的文章中,我介绍了SmartBinding作为Delphi的一个新的易于使用和智能的绑定框架.介绍了包括绑定对象,列表,常规数据和可视控件,以及如何使用导航器,所有这些都用代码做了演示. ...

  9. Repeater循环页面上的控件

    List<string> list = new List<string>(); for (int k = 0; k < RepeaterList.Items.Count; ...

  10. textwrap:格式化文本段落

    介绍 需要美观打印(pretty-printing)的情况下,可以使用textwrap模块格式化要输出的文本. 它提供了很多文本编辑器和字符处理器中都有的段落自动换行或填充特性 填充段落 import ...