如何修改Python代码,精准打印输入中存在的具体违规数字?
问题
我编写了如下Python代码,用于检查输入内容是否包含数字:
def no_num(): invalid_char = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} while True: invalid_char_counter = 0 user_input = input() for char in invalid_char: if char in user_input: invalid_char_counter = 1 if invalid_char_counter == 0: print(f'Success: {user_input} has no numbers.') else: print(f'Error: {user_input} has a number detected. Number(s) detected:') no_num()目前代码仅能检测输入中是否存在数字,但我希望在错误提示的“Number(s) detected:”后,精准输出输入中存在的、属于invalid_char集合的具体数字。请问是否有简便的实现方法?
解决方案
直接收集输入中属于数字集合的字符即可,根据需求可以选择去重或保留重复项,以下是两种实现方式:
方式一:去重输出(推荐)
如果希望重复出现的数字只显示一次,用集合去重后排序输出:
def no_num(): invalid_char = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} while True: user_input = input() # 筛选输入中的数字字符 detected_numbers = [char for char in user_input if char in invalid_char] # 去重并排序,让输出更整齐 unique_numbers = sorted(list(set(detected_numbers))) if not detected_numbers: print(f'Success: {user_input} has no numbers.') else: print(f'Error: {user_input} has a number detected. Number(s) detected: {", ".join(unique_numbers)}') no_num()
方式二:保留所有出现的数字
如果需要显示所有出现的数字(包括重复项),直接拼接即可:
def no_num(): invalid_char = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} while True: user_input = input() detected_numbers = [char for char in user_input if char in invalid_char] if not detected_numbers: print(f'Success: {user_input} has no numbers.') else: print(f'Error: {user_input} has a number detected. Number(s) detected: {", ".join(detected_numbers)}') no_num()
说明
- 用列表推导式遍历输入字符,筛选出属于数字集合的元素,比原代码的循环判断更高效简洁
", ".join()方法将数字列表拼接成字符串,输出格式更友好
内容的提问来源于stack exchange,提问作者CommercialGrape
相关产品推荐
相关产品推荐

