【python】if 条件判断 +字符串的{}填空+(一个用户登陆及修改密码的例子)

本文介绍了Python中的条件控制,包括单条件和多条件控制,并通过一个用户登录验证的实例进行演示。此外,还展示了如何利用字符串填空使代码更加简洁专业。参考《小白的第一本Python》及Runoob教程。

博客已经搬家到“捕获完成”:

https://www.v2python.com

 

1、单条件控制

 

2、多条件控制(这个很重要,掌握了这个,就掌握了上一个的原理和用法)

 

3、具体的一个例子:

4、接下来,是我自己写的关于一个登陆验证的程序:

 

#千万要记住要把这个初始的列表放到函数体外
passwd =['change','123456']  

def account_login():
    
    input_passwd = input('Please input the passwd:\n')
    
    if input_passwd == passwd[-1]:
        print('right,login\n')    
    elif input_passwd == passwd[0]:
        reset_passwd = input('ok,u will reset passwd:\n') 
        passwd.append(reset_passwd)
        print('right,passwd is reseted, new passwd is',passwd[-1]) 
        account_login()
    else:
        print('wrong,Please re-input the passwd\n')
        account_login()

print('Thank you!\n')
account_login()  

 

 

 

5、接下来,修改一下,将字符串填空加入进去,修改下面这一句话,显得更简洁专业:

print('right,passwd is reseted, new passwd is',passwd[-1]) 
#修改为下面一句话
print('right,passwd is reseted, new passwd is:{} \n'.format(passwd[-1]))   #对这一句话进行了修改,添加了{}

 

 

#千万要记住要把这个初始的列表放到函数体外  
passwd =['change','123456']    
  
def account_login():  
      
    input_passwd = input('Please input the passwd:\n')  
      
    if input_passwd == passwd[-1]:  
        print('right,login\n')      
    elif input_passwd == passwd[0]:  
        reset_passwd = input('ok,u will reset passwd:\n')   
        passwd.append(reset_passwd)  
        print('right,passwd is reseted, new passwd is:{} \n'.format(passwd[-1]))   #对这一句话进行了修改,添加了{}
        account_login()  
    else:  
        print('wrong,Please re-input the passwd\n')  
        account_login()  
  
print('Thank you!\n')  
account_login() 

 

 

 

 

参考资料:

小白的第一本python

http://www.runoob.com/python/python-lists.html

 

<think>好的,我现在需要帮用户解决一个关于判断字符串是否是回文对联的Python填空题。题目给出的代码框架中有一个while循环,需要条件判断部分,让程序正确判断字符串是否为回文对联。 首先,我得理解回文对联的定义。回文对联指的是对联的上联和下联互为回文,即从前往后读和从后往前读是一样的。例如给出的例子“客上天然居,居然天上客”,前半句和后半句互为回文。但这里可能需要注意,整个字符串作为一个整体是否是回文,而不仅仅是上下联分开。需要确认题目中的具体要求,但根据给出的例子,整个字符串可能被当作一个整体来判断是否为回文。 接下来,分析用户提供的代码结构。代码中的s变量被赋为这个对联字符串。low和high分别初始化为0和字符串长度减一,也就是字符串的起始和末尾索引。然后进入一个while循环,条件是low < high。在循环内部有一个if条件判断,如果满足,则打印不是回文,并break退出循环。之后low递增1,high应该递减1,但用户提供的代码中high的递减可能被遗漏了。然后,当循环正常结束(即没有被break中断)时,执行else块,打印是回文。 现在,需要确定if条件应该是什么。回文判断的标准是每个对应的字符是否相等。因此,在每次循环中,应该检查s[low]是否等于s[high]。如果不相等,就说明不是回文,需要执行print和break。因此,if的条件应该是s[low] != s[high]。同时,在每次循环中,low需要增加1,而high需要减少1,这样才能逐步向中间靠拢,比较所有对应的字符。但用户提供的代码中,只有low +=1,而没有high -=1,这可能导致循环无法正确终止,或者在比较时遗漏字符。所以这可能是一个需要修正的地方,但根据题目要求,可能只需要if条件,而其他部分可能已经正确,或者用户可能在代码中漏写了high的调整。 不过,仔细看用户提供的代码,在while循环内部,只有low +=1,而没有high -=1。这会导致high的不变,而low一直增加到超过high,或者导致比较的字符不正确。例如,第一次比较s[0]和s[high],然后low变成1,但high还是原来的,下一次比较s[1]和s[high],这显然不对。因此,正确的做法是在每次循环中,low递增,high递减。但用户提供的代码中可能在这里存在错误,需要用户补充。不过根据题目,用户可能希望我们只if条件,而其他部分可能已经正确,或者可能用户代码中存在输入错误。 但根据题目要求,用户需要填空使得程序完整。原题中的代码可能已经存在high的递减,但被用户错误地省略了。例如,在low +=1之后,应该有一行high -=1,否则循环无法正确比较所有对应的字符。所以,这可能是一个需要用户补充的部分,或者题目中的代码可能已经存在,但用户在这里没有正确展示。然而,根据用户给出的代码,当前循环中只有low +=1,而没有high -=1,这会导致high的不变,从而陷入无限循环或者错误判断。但用户可能希望我们只if条件部分,而其他部分可能已经正确,或者可能题目中的代码有排版错误。 现在,假设用户提供的代码是正确的,但需要if条件。在这种情况下,循环每次low增加1,但high没有减少,这显然不对,因此可能导致无法正确比较所有字符。例如,假设字符串长度为偶数,low和high初始为0和n-1,第一次比较索引0和n-1,然后low变成1,但high还是n-1,第二次比较索引1和n-1,这显然错误,因为应该比较1和n-2。因此,可能用户提供的代码中存在错误,需要补充high -=1。但根据题目,用户可能只是需要if条件,而代码的其他部分可能已经正确,或者用户可能在输入时遗漏了high的调整。 此时,我需要考虑用户可能希望我们充的空白是if的条件部分,而其他部分可能已经正确,或者可能存在其他错误。但根据题目给出的代码,在循环体中,只有low +=1,而没有high -=1,这显然是一个错误。因此,正确的代码应该在每次循环中同时增加low和减少high。这可能意味着用户需要补充high -=1,但题目中的填空可能只涉及if条件。或者,可能用户希望我们指出这一点,但根据题目要求,可能需要同时写条件并补充high的递减。 不过,用户的问题明确指出要填空使得程序完整,而给出的代码中有两个空行:在if后面的条件,以及可能的另一个地方。例如,代码中的while循环体内部,在low +=1之后,可能应该有一个high -=1,但用户可能漏掉了。或者,用户可能希望我们补充的是if条件,而其他部分正确。 现在,回到题目中的代码: s = '客上天然居,居然天上客' low=0 high=len(s)-1 while low<high: if : print(s,"不是回文对联") break low+=1 # 这里可能需要high -=1 else: print(s,"是回文对联") 根据这个结构,循环中每次low增加1,但high没有减少,这将导致循环无法正确比较所有字符。例如,对于字符串长度为n,循环会执行n/2次,但每次比较的是low从0到n//2 -1,而high始终是n-1,这显然不正确。因此,正确的做法是在每次循环中,low增加1,high减少1。因此,用户提供的代码中缺少high -=1这一行,这可能是需要补充的部分,但题目中的填空可能只涉及if条件。或者,可能用户希望我们补充if条件和high的调整。 但用户的问题明确指出要填空使得程序完整,所以需要确定有几个空需要。根据给出的代码,if后面有一个空,可能还有一个空在循环体内,比如在low +=1之后加上high -=1。但根据代码的当前结构,用户可能只留了if条件的空,而其他部分可能已经正确,或者可能代码中存在排版错误。 假设用户希望我们写的是if条件,那么正确的条件是s[low] != s[high]。同时,可能需要在循环体内补充high -=1。但根据代码的当前结构,循环体内只有low +=1,而没有high -=1,这会导致high的不变,从而在比较时永远只比较第一个字符和最后一个字符,直到low超过high,但此时可能已经错误地判断为是回文。例如,假设字符串是“abba”,初始low=0, high=3。第一次比较索引0和3,如果相等,low增加到1。然后循环继续,low=1,high=3,此时low < high,再次进入循环,比较索引1和3,即第二个字符和最后一个字符,可能不相等,导致错误判断。因此,必须同时在循环中将high递减。 因此,正确的代码应该在每次循环中,low +=1和high -=1。而用户提供的代码中缺少high -=1,因此这可能是一个需要用户补充的部分。但是,根据用户给出的代码,循环体内只有low +=1,而后面没有high的调整,这显然是一个错误。因此,正确的填空应该是在if条件中写s[low] != s[high],并且在循环体中补充high -=1。 但用户的问题可能只让if条件,而其他部分可能已经正确,或者可能代码中存在排版错误。例如,用户可能在输入代码时,不小心将high -=1放在了low +=1的同一行,或者遗漏了。例如,用户给出的代码可能应该是: low +=1 high -=1 但可能用户误写成了只有low +=1。因此,这种情况下,程序无法正确运行,必须补充high的递减。 因此,正确的填空应该是在if的条件部分写s[low] != s[high],并且在循环体内添加high -=1。但根据题目中的代码结构,用户可能只留了一个空,即if的条件部分,而其他部分可能已经正确,或者需要补充high的调整。 但根据用户提供的代码,循环体内只有low +=1,而没有high -=1,这显然是错误的。因此,用户可能需要同时补充这两个部分:if的条件和high的调整。但题目中的填空可能只涉及if条件,而其他部分可能已经正确。这时候需要用户自己补充high的调整,或者题目中的代码可能存在错误。 在这种情况下,我需要确定用户的问题中的代码是否需要补充high的调整。根据题目中的代码: 在循环体中,有: if ...: print... break low +=1 (此处可能有一个空行需要high -=1) else: print... 因此,用户可能需要写两个部分:if条件和high的调整。或者,可能用户提供的代码中已经存在high的调整,但在输入时被遗漏了。例如,用户可能在代码中写的是: low +=1 high -=1 但是被错误地排版成了只有low +=1。这种情况下,需要用户补充high -=1。因此,正确的代码应该在每次循环中同时调整low和high的。 综上,正确的填空应该是: 在if条件中写:s[low] != s[high] 并在循环体内补充:high -=1 但根据用户给出的代码,循环体内只有low +=1,所以可能需要用户补充high的递减。因此,正确的答案应该包括这两个部分。但根据用户的问题,可能只需要if条件,而循环体内的high调整可能已经被正确编码。例如,可能用户代码中的low +=1后面有一个high -=1,但被用户省略了。或者,用户可能希望我们只写条件部分,而其他部分正确。 因此,可能的正确答案是,if条件为s[low] != s[high],并且补充high -=1在循环体内。但根据用户提供的代码,循环体内只有low +=1,因此必须补充high的递减。否则,程序无法正确运行。 现在,回到用户的问题,需要填空使得程序完整。可能存在的填空是两个地方:if条件和循环体内的high调整。例如,用户给出的代码中,在low +=1之后可能有一个空行需要high -=1。或者,可能只有一个空需要,即if条件,而其他部分已经正确。 例如,用户提供的代码可能应该是: while low < high: if s[low] != s[high]: print(...) break low +=1 high -=1 这样,每次循环比较两个字符,然后移动low和high向中间靠拢。但根据用户给出的代码,循环体内只有low +=1,没有high -=1,因此需要补充。 因此,正确的填空应该是: 在if后面写s[low] != s[high] 并且在循环体内添加high -=1 但用户的问题可能只留了一个空,即if条件,而其他部分正确。这可能导致程序不正确,因为high不会递减。因此,用户可能需要同时补充这两个部分。但根据题目中的代码结构,用户可能只留了if条件的空,而其他部分已经正确。在这种情况下,代码可能无法正确运行,除非high在循环中被正确调整。 总结: 正确的判断条件是s[low] != s[high],并且在每次循环中,low增加1,high减少1。因此,用户提供的代码中缺少high -=1的语句,导致程序无法正确比较所有字符。因此,填空的答案应该是: if s[low] != s[high]: 并且在循环体内添加high -=1 但根据用户给出的代码,可能只需要if条件,而其他部分可能需要用户补充。但根据用户提供的代码,循环体中只有low +=1,因此必须补充high -=1才能正确运行。因此,正确的答案应该包括这两个部分。</think>以下是为判断回文对联程序填空的完整解答: ```python s = '客上天然居,居然天上客' low = 0 high = len(s)-1 while low < high: if s[low] != s[high]: # 需要入的条件 print(s, "不是回文对联") break low += 1 high -= 1 # 需要补充的操作 else: print(s, "是回文对联") ``` ### 填空解析 1. **条件判断**:`s[low] != s[high]` - 比较对称位置字符是否相等 - 若发现不相等的字符,立即判定非回文 2. **双指针移动**:`high -= 1` - 在`low`右移的同时,`high`必须左移 - 保证每次比较新的对称位置字符 --- ### 代码原理 1. **双指针法**:通过`low`(头指针)和`high`(尾指针)向中间移动 2. **循环终止条件**:当`low >= high`时完成全部对称位置检查 3. **else子句**:仅当循环完整执行(未触发break)时生效,确认是回文 --- ### 示例验证 对输入字符串`客上天然居,居然天上客`: 1. 首字符`客`与末字符`客`相等 2. 次字符`上`与倒数第二字符`上`相等 3. 依此类推完成全部对称位置比较 4. 最终输出:`客上天然居,居然天上客 是回文对联` --- ### 复杂度分析 - 时间复杂度:$O(n)$,只需遍历半长度 - 空间复杂度:$O(1)$,仅使用固定空间存储指针 --- ### 扩展应用 此算法同样适用于: - 英文回文检测(如"madam") - 数字回文检测(如12321) - 含标点回文句(需先预处理去除标点)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值