Python函数默认参数不生效问题求助
Python函数默认参数不生效问题求助
嗨,我来帮你排查这个问题~你的代码思路是对的,但问题出在**input()的返回值和函数默认参数的触发逻辑**上:
当你直接按回车不输入内容时,input()返回的是空字符串"",而不是让函数自动使用默认参数。因为你已经把这个空字符串作为参数传给函数了,函数会优先使用你传入的参数(哪怕是空字符串),而不会触发默认值。另外,gol通过input()获取的是字符串类型,就算用户输入数字,也会被当成字符串处理,这也可能和你预期的整数类型不一致。
给你两个修改方案,都能实现你想要的效果:
方案一:清晰的条件判断版本
def ficha(nome="<desconhecido>", gols=0): return f'O jogador {nome} fez {gols} gol(s) no campeonato.' jog = input('Nome do jogador: ').strip() # 去掉前后空格,避免误判 gol_input = input('Número de gols: ').strip() # 处理进球数:空输入用默认值,非数字输入也设为0 try: gol = int(gol_input) if gol_input else None except ValueError: gol = 0 # 根据输入情况调用函数 if not jog and gol is None: print(ficha()) # 两个都没输入,全用默认 elif not jog: print(ficha(gols=gol)) # 只输了进球数,名字用默认 elif gol is None: print(ficha(jog)) # 只输了名字,进球数用默认 else: print(ficha(jog, gol)) # 两个都输入了,用用户输入的值
方案二:更简洁的关键字参数版本
def ficha(nome="<desconhecido>", gols=0): return f'O jogador {nome} fez {gols} gol(s) no campeonato.' jog = input('Nome do jogador: ').strip() gol_input = input('Número de gols: ').strip() # 处理进球数的异常情况 try: gol = int(gol_input) if gol_input else None except ValueError: gol = 0 # 用关键字参数控制是否传入值,空输入就不传,让函数用默认 print(ficha( nome=jog if jog else None, gols=gol if gol_input else None ))
关键修改点说明:
strip()处理:去掉输入内容的前后空格,避免用户输入空格被误判为有效内容;- 默认参数触发逻辑:只有当用户没有输入(空字符串)时,才不给函数传对应参数,让函数自动使用预设的默认值;
- 类型转换与异常处理:把用户输入的进球数转换成整数,同时处理用户输入非数字的情况(比如字母),避免程序报错。
这样修改后,当你直接按回车不输入内容时,函数就会自动使用<desconhecido>和0这两个默认参数啦~
备注:内容来源于stack exchange,提问作者Uatilla Viana Almeida
相关产品推荐
相关产品推荐

