Python练习问题:如何调整变量位置使输出结尾恒为'p'
解决输出结尾固定为'p'的问题
首先我先梳理下你的需求:练习任务要求打印的语句结尾必须是p,当前输入数字9时输出开头是p但结尾不符合要求,你希望调整后结尾固定为p(比如示例的q p q p p q p q p p),并且觉得变量a的递减操作位置可能是问题所在。
先看你的原代码:
number = int((input()+1)/2 - 1) i = 1 while i <= number: a = number while a >= i: if a % 2 == 0: print("q", end = " ") a -= 1 elif a % 2 == 1: print("p", end = " ") a -= 1 print() i += 1
问题分析
原代码的内层循环是从number开始递减到i,根据a的奇偶性输出q或p。但这种逻辑无法保证每次输出的结尾是p——当i为偶数时,内层循环的最后一个a是偶数,会输出q,直接导致结尾不符合要求。另外你提到输入9的输出开头是p,推测你实际代码里的奇偶判断可能写反了(比如偶数输出p、奇数输出q),这会让开头固定为p,结尾更容易出现q。
解决方案
要让结尾固定为p,核心是确保每次内层循环的最后一个输出必然是p,这里提供两种简单的调整方式:
方式一:固定最后一个输出为p
修改内层循环的终止条件,留最后一个位置强制输出p,从根源上保证结尾符合要求:
number = int((int(input()) + 1) / 2 - 1) # 修正input类型转换,避免字符串运算报错 i = 1 while i <= number: a = number while a > i: # 循环到a大于i为止,留出最后一个位置给p if a % 2 == 0: print("q", end=" ") else: print("p", end=" ") a -= 1 print("p", end=" ") # 最后固定输出p,确保结尾符合要求 print() i += 1
方式二:调整a的递减时机
把a的递减操作放在判断之前,调整判断基准,让输出序列的结尾自然落在p上:
number = int((int(input()) + 1) / 2 - 1) i = 1 while i <= number: a = number while a >= i: a -= 1 # 先递减,再基于原a值做判断 if (a + 1) % 2 == 0: print("q", end=" ") else: print("p", end=" ") print("p") # 补充结尾的p,确保万无一失 i += 1
验证输入9的情况
当输入9时,number计算为(9+1)/2 -1 =4,调整后的代码每一行输出的结尾都会是p,整体输出的最终结尾也符合你的要求。
内容的提问来源于stack exchange,提问作者Beck Emasoe
相关产品推荐
相关产品推荐

