如何使Python区分大写和小写字符。

如何使Python区分大写和小写字符。,python,Python,大家好,我希望你们能帮我解决一个我还没有解决的小问题。 下面是作业的描述,首先要了解我正在做什么 “在作业的这一部分,你将编写一个程序,输入两种不同的数据 “c1-c2”形式的字符,其中c1 是第一个字符和c2 是第二个吗 字符。您需要检查此输入的有效性。也就是说,输入应 以字母开头,后跟破折号(-),并应以另一个字母大小写结尾 不敏感(意思是“a”和“a”是相同的字符)。请注意 从用户处获取的字符必须彼此不同。在 如果用户输入了无效的输入,您的程序应继续运行 提示输入所需的值,直到输入有效值。

大家好,我希望你们能帮我解决一个我还没有解决的小问题。 下面是作业的描述,首先要了解我正在做什么

“在作业的这一部分,你将编写一个程序,输入两种不同的数据 “c1-c2”形式的字符,其中c1 是第一个字符和c2 是第二个吗 字符。您需要检查此输入的有效性。也就是说,输入应 以字母开头,后跟破折号(-),并应以另一个字母大小写结尾 不敏感(意思是“a”和“a”是相同的字符)。请注意 从用户处获取的字符必须彼此不同。在 如果用户输入了无效的输入,您的程序应继续运行 提示输入所需的值,直到输入有效值。”

以下是一些运行示例:

  • 请在表格c1-c2:a-a中输入两个不同的字符

  • 无效输入

  • 请在表格c1-c2:a-B中输入两个不同的字符 (如果正确,程序应停止。)

以下是我迄今为止所做的尝试:

ascii_letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

def process(Z):
    if Z[0] in ascii_letters:
        return True
    if Z[1] == '-':
        return True
    if Z[2] in ascii_letters:
        return True
    if Z[0] != Z[2]:
        return True
    if Z[0] != Z[2].upper():
        return True
    if Z[0] != Z[2].lower():
        return True 

X = False
while X == False:
    ask = input("Please enter two different characters in the form c1-c2: ")
    if process(ask) == False :
        print("Invalid input!")
    else:
        break

在这里,您的流程几乎总是在第一次检查时终止:

def process(Z):
    if Z[0] in ascii_letters:
        return True
您需要嵌套您的条件,并且仅当所有条件都已满足时才“返回”,这是一个快速示例:

def process(Z):
    if Z[0] in ascii_letters:
        if Z[1] == '-':
           if Z[2] in ascii_letters:
              return True
    return False
注意:在访问Z[2]之前,您需要检查Z的大小是否正确。你还需要加上关于同一封信的支票。因此,您的问题的解决方案是:

def process(Z):
    if len(Z) == 3
       and Z[0] in ascii_letters
       and Z[1] == '-'
       and Z[2] in ascii_letters
       and Z[0].upper() != Z[2].upper():
              return True
    return False

正确的处理方法是使用。它们是一个正则表达式库,作为标准python库的一部分

import re
u_input = 'your string'

def validate(input):
    # chars must be different
    if input[0] == input[-1:]:
        return False
    # begin and end with upper or lower a-z with dash in middle
    pattern = '[a-zA-Z]{1}-[a-zA-Z]{1}'
    result = re.match(pattern, input)
    # re.match returns None if no match
    if not result:
        return False:
    else:
        return True

字符串具有可用于验证输入的方法。使用它们!您可以在“-”上拆分,并验证您有2个长度为1的字符,检查它们是否为字母,并比较每个字符的大写版本

def process(Z):
    parts = Z.split("-")
    return (len(parts)==2 and len(parts[0])==1 and len(parts[1])==1 
        and parts[0].isalpha() 
        and parts[0].upper() == parts[1].upper())

isalpha
适用于所有unicode字符,因此您不必担心用户是否以某种奇怪的语言输入了文本。

我尝试使其尽可能类似于您的代码,而且理解起来非常简单。我想我考虑了所有必要的条件。如果没有,告诉我

from string import ascii_letters

def validity_check(input_chars):
    try:
        # if cant be splitted raises Exception which results in restart
        char_1, char_2 = input_chars.split("-")

        # if characters not in alphabet restarts
        chars_in_alphabet = char_1 in ascii_letters and char_2 in ascii_letters
        if not chars_in_alphabet:
            return False

        # if characters are the same letter restarts
        same_latter = char_1.lower() == char_2.lower()
        if same_latter:
            return False

        # I'm not sure if you want to check if the first letter
        # is small and the second one is capital
        # if so add this block
        # chars_letter_size = char_1 in ascii_letters.lower() and char_2 in ascii_letters.upper()
        # if not chars_letter_size:
        #     return False

        return True

    except:
        return False


while True:
    ask = input("Please enter two different characters in the form c1-c2: ")
    if validity_check(ask):
        break

内置函数-isalpha()将对您的家庭作业有所帮助

while True:
    ask=input('Please enter two different characters in the form c1-c2: ')
    if len(ask)!=3:
        continue
    if ask[1] == '-' and ask[0].isalpha() and ask[2].isalpha() and ask[0]!=ask[2]:
        break

isalpha()函数返回True如果给定字符串包含所有字母。

函数在点击
返回时结束。
欢迎使用StackOverflow。请按照您创建此帐户时的建议,阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。您尚未显示测试用例、实际输出和所需输出。只要您找到一个输入正确的字符,您发布的代码就会退出,而不是检查所有字符是否正确。绘制代码的流程图,并注意其工作原理。将其与所需结果的流程图进行比较。你不能在一次检查后就退出。这不是家庭作业服务。在线上有很多编写复合逻辑检查的示例。这些怎么都没有回答你的问题?如果你在评论发布后真的对如何修复代码迷茫了,这通常意味着你需要的是与本地导师一起花半个小时或是浏览教程,而不是堆栈溢出。同样,请阅读指南。实际上,您要求我们为您编写代码。没有尝试应用我们指出的问题。但是,由于其他人已经给了你几个完成的解决方案,这似乎是一个没有意义的问题。谢谢你,Luc,我来试试看。非常感谢你的帮助,但是我不能使用这些函数,因为我还是一个初学者,我不知道在我的家庭作业的下一部分中如何使用它们。@DirtyLilBirdy很多编程都是在学习如何扩展自己的舒适区之外。很多时候,最简单的解决方案需要你做一些外部学习或研究。使用这样的解决方案而不是10条if-else语句将使您与普通程序员区别开来。除非有明确的相反指示,否则我强烈建议大家读一读正则表达式,并教你们的学生它们的好处。你们绝对是对的!我会考虑你的建议。非常感谢你的帮助。非常感谢!它工作得很好,我感谢你的帮助:这是我已经发布的内容,除了它没有检查字符长度和不区分大小写的比较。我们在倒退!