Tôi đã học 1,5 tuần học Python và làm việc thông qua một trong những nhiệm vụ đầu tiên của tôi. Tôi có một chuỗi đầu vào trong Python trông giống như sau:
input = "4567-8901-2345"
Đối với chuỗi này, tôi muốn kiểm tra bốn quy tắc:
- Chữ số đầu tiên phải là 4.
- Chữ số thứ tư phải lớn hơn một chữ số thứ năm.
- Tổng của tất cả các chữ số phải chia đều cho 4.
- Nếu bạn coi hai chữ số đầu tiên là một số hai chữ số và chữ số thứ bảy và thứ tám dưới dạng một số hai chữ số, tổng của chúng phải là 100.
Tôi đã viết mã sau. Mỗi phần của mã xuất hiện để đáp ứng 4 quy tắc riêng lẻ, nhưng thách thức tôi gặp phải là một khi Quy tắc 1 được đáp ứng thành công chẳng hạn, mã dừng chạy - nó sẽ kiểm tra từng quy tắc liên tiếp và một khi quy tắc không thành công, nó Nên in ra số quy tắc không được đáp ứng. Tôi còn thiếu gì?
def verify[number] :
#rule 1
value_first = input[0]
number = int[value_first]
if number == 4 :
return True
else :
return ['1']
#rule 2
value_second = input[3]
value_third = input[5]
number_second = int[value_second]
number_third = int[value_third]
if number_second == number_third + 1 :
return True
else :
return ['2']
#rule3
total = sum[int[x] for x in input if x.isdigit[]]
if total % 4 == 0 :
return True
else :
return ['3']
#rule4
pair_one = input[0] + input[1]
pair_two = input[7] + input[8]
pair_one_int = int[pair_one]
pair_two_int = int[pair_two]
if pair_one_int + pair_two_int == 100 :
return True
else :
return ['4']
input = "4567-8901-2345"
output = verify[input]
print[output]
hỏi ngày 29 tháng 1 năm 2020 lúc 12:12Jan 29, 2020 at 12:12
2
Để mở rộng nhận xét của tôi, tôi đã chia từng quy tắc thành một chức năng của riêng nó ở đây; Mỗi hàm trả về đúng nếu chúng vượt qua hoặc sai nếu chúng không:
def check_rule1[input]:
return input[0] == "4"
def check_rule2[input]:
value_second = input[3]
value_third = input[5]
number_second = int[value_second]
number_third = int[value_third]
return number_second == number_third + 1
def check_rule3[input]:
total = sum[int[x] for x in input if x.isdigit[]]
return total % 4 == 0
def check_rule4[input]:
pair_one = input[0] + input[1]
pair_two = input[7] + input[8]
pair_one_int = int[pair_one]
pair_two_int = int[pair_two]
return [pair_one_int + pair_two_int == 100]
def check_rules[input]:
print[input]
print[" Rule 1:", check_rule1[input]]
print[" Rule 2:", check_rule2[input]]
print[" Rule 3:", check_rule3[input]]
print[" Rule 4:", check_rule4[input]]
check_rules["4567-8901-2345"]
Điều này sẽ đầu ra
4567-8901-2345
Rule 1: True
Rule 2: False
Rule 3: False
Rule 4: False
- Thực hiện cuộc gọi check_rules
mỗi chức năng kiểm tra và trả về số lượng quy tắc không thể bỏ lại như một bài tập cho người đọc.
Đã trả lời ngày 29 tháng 1 năm 2020 lúc 12:19Jan 29, 2020 at 12:19
AkxakxAKX
Huy hiệu vàng 139K1212 gold badges105 silver badges155 bronze badges
Hoặc, như AKX nói rằng đặt từng quy tắc vào một chức năng duy nhất, điều này sẽ giúp bạn có ý nghĩa hơn về tất cả hoặc không trả về đúng. Bằng cách này, bất cứ khi nào một điều kiện thất bại, việc xác thực bị dừng và số quy tắc được trả về và chỉ khi tất cả các xác nhận là chính xác, nó sẽ trả về đúng một lần.
def verify[number] :
#rule 1
value_first = input[0]
number = int[value_first]
if number != 4 :
return ['1']
#rule 2
value_second = input[3]
value_third = input[5]
number_second = int[value_second]
number_third = int[value_third]
if number_second != number_third + 1 :
return ['2']
#rule3
total = sum[int[x] for x in input if x.isdigit[]]
if total % 4 != 0 :
return ['3']
#rule4
pair_one = input[0] + input[1]
pair_two = input[7] + input[8]
pair_one_int = int[pair_one]
pair_two_int = int[pair_two]
if pair_one_int + pair_two_int != 100 :
return ['4']
return True
input = "4567-8901-2345"
output = verify[input]
print[output]
Đã trả lời ngày 29 tháng 1 năm 2020 lúc 12:17Jan 29, 2020 at 12:17
LeoeleoeLeoE
1.9781 Huy hiệu vàng7 Huy hiệu bạc24 Huy hiệu đồng1 gold badge7 silver badges24 bronze badges
Tôi sẽ đặt mỗi xác nhận bên trong chức năng của chính nó. Mã thực tế của bạn bỏ qua các quy tắc 2, 3 và 4 vì bạn đang trả về một giá trị [true hoặc 1] trong đầu tiên của bạn.
Nếu bạn không muốn sử dụng các chức năng, hãy lưu trữ kết quả của mỗi đánh giá trong danh sách/tuple và kiểm tra xem mỗi yếu tố của danh sách/tuple đó có đúng để chấp nhận rằng đầu vào là một chuỗi hợp lệ.
Đã trả lời ngày 29 tháng 1 năm 2020 lúc 12:21Jan 29, 2020 at 12:21
Enbermudasenbermudasenbermudas
1.5213 huy hiệu vàng18 Huy hiệu bạc41 Huy hiệu đồng3 gold badges18 silver badges41 bronze badges