Hướng dẫn does python distinguish uppercase and lowercase? - python có phân biệt chữ hoa và chữ thường không?

Xin chào các bạn, tôi hy vọng bạn sẽ giúp tôi với một vấn đề nhỏ mà tôi chưa tìm ra. Dưới đây là mô tả về bài tập về nhà để có một ý tưởng đầu tiên về những gì tôi đang làm việc.

"Trong phần này của bài tập về nhà, bạn sẽ viết một chương trình nhập hai ký tự khác nhau dưới dạng" C1-C2 ", trong đó C1 là ký tự đầu tiên và C2 là ký tự thứ hai. Bạn cần kiểm tra tính hợp lệ của đầu vào này Đó là, đầu vào nên bắt đầu bằng một chữ cái, theo sau là một dấu gạch ngang (-) và nó nên kết thúc bằng một trường hợp chữ cái khác một cách vô cảm (điều đó có nghĩa là "A" và "A" là cùng một ký tự). Xin lưu ý rằng Các ký tự được lấy từ người dùng phải khác nhau. Trong trường hợp người dùng nhập vào đầu vào không hợp lệ, chương trình của bạn sẽ liên tục nhắc nhở giá trị cần thiết cho đến khi anh ta nhập một giá trị hợp lệ. "

Đây là một số chạy mẫu:

  • Vui lòng nhập hai ký tự khác nhau trong Mẫu C1-C2: A-A

  • Đâu vao không hợp lệ!

  • Vui lòng nhập hai ký tự khác nhau trong Mẫu C1-C2: A-B (Chương trình sẽ dừng nếu đúng.)

Đây là những gì tôi đã thử cho đến nay:

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

Khi được hỏi ngày 7 tháng 5 năm 2018 lúc 17:38May 7, 2018 at 17:38

Hướng dẫn does python distinguish uppercase and lowercase? - python có phân biệt chữ hoa và chữ thường không?

16

Ở đây quá trình của bạn hầu như luôn luôn chấm dứt ở lần kiểm tra đầu tiên:

def process(Z):
    if Z[0] in ascii_letters:
        return True

Bạn cần tổ chức tình trạng của mình và 'trở lại' chỉ khi tất cả các điều kiện được lấp đầy, một ví dụ nhanh:

def process(Z):
    if Z[0] in ascii_letters:
        if Z[1] == '-':
           if Z[2] in ascii_letters:
              return True
    return False

Lưu ý bạn sẽ muốn kiểm tra rằng Z là kích thước phù hợp trước khi truy cập z [2]. Và bạn cũng cần thêm séc về cùng một chữ cái. Vì vậy, một giải pháp cho vấn đề của bạn sẽ là:

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

Đã trả lời ngày 7 tháng 5 năm 2018 lúc 17:48May 7, 2018 at 17:48

Hướng dẫn does python distinguish uppercase and lowercase? - python có phân biệt chữ hoa và chữ thường không?

LuclucLuc

1.3531 Huy hiệu vàng5 Huy hiệu bạc14 Huy hiệu đồng1 gold badge5 silver badges14 bronze badges

1

Chuỗi có các phương pháp bạn có thể sử dụng để xác thực đầu vào. Sử dụng chúng! Bạn có thể chia trên '-' và xác minh bạn có 2 ký tự có độ dài 1, kiểm tra xem chúng có chữ cái và so sánh phiên bản trường hợp trên của mỗi ký tự không.

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 hoạt động cho tất cả các ký tự Unicode để bạn không phải lo lắng liệu người dùng có nhập văn bản bằng một số ngôn ngữ lạ hay không.

Đã trả lời ngày 7 tháng 5 năm 2018 lúc 17:52May 7, 2018 at 17:52

tdelaneytdelaneytdelaney

66.3k5 Huy hiệu vàng74 Huy hiệu bạc106 Huy hiệu đồng5 gold badges74 silver badges106 bronze badges

1

Chức năng sẵn có -isalpha () sẽ hữu ích cho bài tập về nhà của bạn.-isalpha() will be helpful for your homework.

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

Hàm isalpha () trả về true nếu chuỗi đã cho có tất cả các bảng chữ cái.isalpha() function returns True if the given string has all alphabets.

Đã trả lời ngày 7 tháng 5 năm 2018 lúc 18:02May 7, 2018 at 18:02

Hướng dẫn does python distinguish uppercase and lowercase? - python có phân biệt chữ hoa và chữ thường không?

1

Cách chính xác để xử lý điều này là với các biểu thức thông thường. Họ là một thư viện Regex như là một phần của thư viện Python tiêu chuẩn.

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

Đã trả lời ngày 7 tháng 5 năm 2018 lúc 17:51May 7, 2018 at 17:51

Hướng dẫn does python distinguish uppercase and lowercase? - python có phân biệt chữ hoa và chữ thường không?

Matt_GMatt_GMatt_G

5064 Huy hiệu bạc14 Huy hiệu Đồng4 silver badges14 bronze badges

3

Tôi đã cố gắng làm cho nó tương tự như mã của bạn nhất có thể và nó khá đơn giản để hiểu. Tôi nghĩ rằng tôi đã xem xét tất cả các điều kiện bắt buộc. Nếu không, hãy nói cho tôi biết.

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

Đã trả lời ngày 7 tháng 5 năm 2018 lúc 17:59May 7, 2018 at 17:59

Tom Wojciktom WojcikTom Wojcik

4.7304 Huy hiệu vàng27 Huy hiệu bạc40 Huy hiệu đồng4 gold badges27 silver badges40 bronze badges

1