python - Python - 从 2 参数递归调用返回单个值
问题描述
所以我正在尝试制作一个简单的程序来检查一个数字中是否连续有 2 个 8。我知道我可以简单地做
def double_eights(n):
return '88' in str(n)
但我想尝试编写下面的递归方法
def double_eights(n, counter=0):
#base cases
if counter == 2:
return True
if n == 0:
return False
#recursive calls
if n % 10 == 8:
return(double_eights(n//10, counter + 1))
else:
return(double_eights(n//10), 0)
然而,虽然这会返回正确的结果,但由于参数的传入方式,有时它会返回一个元组,其中包含它传递的所有非 8 数字的 0。例如:
>>> double_eights(2882)
(True, 0)
>>> double_eights(80808080)
((((False, 0), 0), 0), 0)
有没有办法让函数只返回True
orFalse
值而不需要解析返回的元组?
提前致谢!
解决方案
问题出在代码的最后一行。您返回double_eights(n//10)
call 和的结果0
,因此这些值被打包在tuple
.
您可以将代码的最后一行更改为
return(double_eights(n//10, 0))
指定counter
值,但这不是必需的,因为counter
有默认值
def double_eights(n, counter=0):
所以你不需要指定它。最终代码可能如下所示:
def double_eights(n, counter=0):
#base cases
if counter == 2:
return True
if n == 0:
return False
#recursive calls
if n % 10 == 8:
return(double_eights(n//10, counter + 1))
else:
return(double_eights(n//10))
输出:
double_eights(2882)
True
double_eights(80808080)
False
推荐阅读
- docker - ESP8266:构建 nodemcu 固件时出现“设备上没有剩余空间”错误
- c - 调用 InitCommonControlsEx() 的正确位置是什么?
- python - 获取最长的单词并删除每个字符串后的 \n?
- android - 框架布局不支持投掷手势吗?
- git - 如何使用 SSH 密钥对同一服务器上的两个单独的 Github 存储库进行身份验证?
- r - 我需要使用可以选择的不同列来绘制图表
- mongoose - Mongoose 聚合 $match 返回空结果
- git-svn - 我尝试 'git svn clone http://host/svn/projectpath/ --trunk=trunk --branches=branches',但没有下载到我的文件夹中
- php - Mailgun 电子邮件未从 Laravel 8 Valet 应用程序发送
- extjs - 无法获取此处的 api 来显示 UI 组件