递归生成不重复ID时函数返回None值的原因探究
问题原因与修复方案
问题根源
你遇到的None返回问题,核心是递归调用时没有传递返回值。当生成的value和输入的ID相同时,你调用了generateNumber(value),但没有把这个递归调用得到的结果return出去。函数执行到这一步后,没有后续的return语句,Python就会默认返回None。
另外还有个冗余问题:你把generateNumber函数定义放在了while True循环内部,每次循环都会重新定义一次函数,完全没必要,反而容易引发意外问题。
修复后的递归版本代码
import random # 把函数定义移到循环外,避免重复定义 def generateNumber(existing_id): value = random.randint(1, 2) if value != existing_id: return value # 递归调用时必须return,把结果传递回上层 return generateNumber(value) while True: a = int(input('Enter a data: ')) print("->", generateNumber(a))
更直观的非递归版本
其实这种场景用循环比递归更合适,避免不必要的函数调用层级,代码逻辑也更易懂:
import random def generateNumber(existing_id): while True: value = random.randint(1, 2) if value != existing_id: return value while True: a = int(input('Enter a data: ')) print("->", generateNumber(a))
内容的提问来源于stack exchange,提问作者XharonX
相关产品推荐
相关产品推荐

