Python入门实验:正整数逆序二进制输出问题求解
整数逆序二进制字符串生成问题解答
问题背景
我正在学习Python入门课程,这是我正在完成的实验之一。实验要求如下:
编写程序,输入一个正整数,输出表示该整数逆序二进制的0和1组成的字符串。对于整数x,算法步骤为:
当x大于0时:
- 输出x模2的结果(余数为0或1)
- 将x赋值为x除以2的整数结果
注意:上述算法输出的0和1是逆序的。
示例:输入6,输出011
我尝试将数字转换为字符串但未成功,以下是我的尝试代码:
number = int(input('Enter your number\n')) number_list = [] while number != 0: number = number // 2 number_list.append((number % 2)) number_list.reverse() print(number_list)
问题分析
你的代码存在三个核心逻辑错误:
- 操作顺序颠倒:应该先取当前数字的模2余数,再对数字做整除2的操作,你现在先整除再取模,拿到的是下一轮数字的余数,完全偏离了题目要求的步骤。
- 多余的列表反转:每次循环都反转列表会导致已存储的结果反复颠倒,最终输出混乱,完全没必要这么做。
- 输出格式错误:题目要求输出字符串,但你直接打印了列表,不符合输出要求。
正确实现方案
方案一:直接拼接字符串(贴合题目算法步骤)
number = int(input('Enter your number\n')) result = "" while number > 0: # 先取当前数的模2结果,转为字符串拼接到结果中 result += str(number % 2) # 再将数整除2,进入下一轮循环 number = number // 2 print(result)
测试输入6时,执行流程:
- 6>0 → 6%2=0 → result="0" → number=3
- 3>0 → 3%2=1 → result="01" → number=1
- 1>0 → 1%2=1 → result="011" → number=0
- 循环结束,输出"011",完全符合示例要求。
方案二:用列表存储再拼接(适配你原本的思路)
number = int(input('Enter your number\n')) number_list = [] while number > 0: # 先把当前数的模2结果转为字符串存入列表 number_list.append(str(number % 2)) number = number // 2 # 直接拼接列表元素得到结果字符串 result = ''.join(number_list) print(result)
这个方案和方案一逻辑一致,只是用列表暂存结果,最后统一拼接成字符串,适合需要中间处理的场景。
内容的提问来源于stack exchange,提问作者VivianeKarpinski
相关产品推荐
相关产品推荐

