Python代码中input嵌套print导致None出现的问题及解决
为什么你的Python代码会出现
None? 嘿,我一眼就瞅出问题所在啦!你代码里的input(print("..."))写法就是导致None出现的元凶。
问题根源
print()函数本身的返回值是**None**,当你把print()放进input()的参数里时,程序会先执行print()输出你写的提示文本,然后把print()返回的None传给input()作为它的提示语——这就导致控制台会额外显示None,让你摸不着头脑。
拿你这段代码举例:
first_question = str(input(print("Who do you bet for? ")))
实际执行流程是这样的:
- 先运行
print("Who do you bet for? "),在控制台输出这句话 print()执行完后返回None,所以input()的参数变成了None,控制台就会显示None等待你输入- 你输入内容后,
input()把输入值返回,转成字符串赋值给first_question
怎么阻止None显示?
超级简单!直接把提示文本作为input()的参数就行,input()本身就支持接收字符串作为提示语,完全不需要额外套一层print()。
修改后的核心代码片段:
# 去掉多余的print(),直接把提示语传给input first_question = input("Who do you bet for? ").strip() # 后面的赌注输入也同理修改: bet = int(input("How much you bet? "))
加个.strip()是为了去掉输入前后的空格,避免用户不小心输入空格导致判断不匹配~
额外的小优化
我还帮你整理了两个让代码更简洁的小技巧:
- 判断
first_question的条件可以简化,用集合配合lower()兼容大小写输入:# 不管用户输入Tim、TIM还是tim都能匹配 if first_question.lower() in {"tim", "tess", "alex", "duck", "dog"}: - 把重复的赌注验证逻辑封装成函数,避免写一堆重复代码:
之后需要获取合法赌注时,直接调用def get_valid_bet(my_money): while True: try: bet = int(input("How much you bet? ")) if bet < 0: print("The bet can't take negative values! ") elif bet > my_money: print("The bet can't be above the money you have! ") else: return bet except ValueError: # 处理用户输入非数字的情况 print("Please enter a valid number! ")bet = get_valid_bet(my_money)就好,代码更清爽,还能处理异常输入~
内容的提问来源于stack exchange,提问作者LittleBlue
相关产品推荐
相关产品推荐

