0
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi đang cố gắng tìm sự khác biệt giữa tổng của các chữ số chẵn và các chữ số lẻ trong một số. Mã của tôi chỉ hoạt động cho một trường hợp là 412 nhưng nó không hoạt động cho các số như 23 và 1203. Tôi không biết tại sao. Đây là mã của tôi
def digitS[n]:
even = 0
odd = 0
while [n!=0]:
for i in range[n]:
if i % 2 == 0:
even = even + [n%10]
else:
odd = odd + [n%10]
n//=10
return even - odd
n = 412
print[digitS[n]]
Abilogos
4.4772 Huy hiệu vàng16 Huy hiệu bạc37 Huy hiệu đồng2 gold badges16 silver badges37 bronze badges
Hỏi ngày 24 tháng 11 năm 2020 lúc 11:22Nov 24, 2020 at 11:22
3
Điều đó thật khó hiểu đối với tôi, rằng bạn muốn tìm thấy sự khác biệt giữa số lẻ và thậm chí các chữ số hoặc sự khác biệt giữa các vị trí lẻ và chẵn?
BTW, tôi giả định rằng bạn muốn đếm cái trước - mã của bạn thực hiện sau này với một số vấn đề trong thiết kế.
def digit[n]:
even = 0
odd = 0
while [n != 0]:
r = n % 10
if r % 2 == 0:
even = even + r
else:
odd = odd + r
n //= 10
return even - odd
n = 412
print[digit[int[n]]]
và một phản ứng ngắn gọn hơn với sự trợ giúp của chuỗi!
def digit[n]:
even = [int[i] if int[i] % 2 == 0 else 0 for i in str[n]]
odd = [int[i] if int[i] % 2 else 0 for i in str[n]]
return sum[even] - sum[odd]
Đã trả lời ngày 24 tháng 11 năm 2020 lúc 11:40Nov 24, 2020 at 11:40
Javadrjavadrjavadr
3601 Huy hiệu bạc8 Huy hiệu đồng1 silver badge8 bronze badges
Chỉ cần loại bỏ cho vòng lặp.
def digitS[n]:
even = 0
odd = 0
while [n!=0]:
if n % 2 == 0:
even += [n%10]
else:
odd += [n%10]
n//=10
return even - odd
n = 412
print[digitS[n]]
Đã trả lời ngày 24 tháng 11 năm 2020 lúc 11:33Nov 24, 2020 at 11:33
AbilogosabilogosAbilogos
4.4772 Huy hiệu vàng16 Huy hiệu bạc37 Huy hiệu đồng2 gold badges16 silver badges37 bronze badges
1
Hỏi ngày 24 tháng 11 năm 2020 lúc 11:22
def digits[n]:
even = 0
odd = 0
while [n!=0]:
if n % 2 == 0:
even += [n%10]
else:
odd += [n%10]
n //= 10
return abs[even - odd]
print[digits[412]] # 5
print[digits[23]] # 1
Đã trả lời ngày 24 tháng 11 năm 2020 lúc 11:33Nov 24, 2020 at 11:33
tanmay_gargtanmay_gargtanmay_garg
Abilogosabilogos1 silver badge13 bronze badges
2
Tôi đã thực hiện một số chỉnh sửa cho mã của bạn dưới đây. Những gì bạn đã cố gắng là hoàn toàn đúng, nhưng vòng lặp là một vật cản và nên được loại bỏ. Ngoài ra, từ những gì tôi hiểu, bạn muốn difference
giữa các tổng số lẻ và thậm chí có chữ số. Đối với điều đó, bạn phải trả về giá trị tuyệt đối của even - odd
.
3891 Huy hiệu bạc13 Huy hiệu đồngNov 24, 2020 at 11:34
Tôi nghĩ rằng bạn không cần for
ở dòng thứ 5, vì bạn chỉ muốn lặp lại các chữ số thay vì toàn bộ phạm vi số. Vì vậy, ví dụ nếu số là 1203 bạn muốn kiểm tra 1, 2, 0 và 3, thay vì 0, 1, 2, 3 ... 1201, 1202. Ngoài ra, các chữ số đã được xử lý trong ____10, vì vậy for
không cần thiết .
def digit[n]:
even = 0
odd = 0
string = str[n]
for i in string:
if int[i] % 2 == 0:
even += int[i]
else:
odd += int[i]
return even - odd
n = 282
print[digit[n]] #12
Đã trả lời ngày 24 tháng 11 năm 2020 lúc 11:34Nov 24, 2020 at 11:37
Biến đầu vào của bạn thành một chuỗi, lặp lại từng yếu tố, kiểm tra xem chúng có kỳ lạ hay thậm chí bằng cách chuyển chúng thành số nguyên et voila!ombk
Đã trả lời ngày 24 tháng 11 năm 2020 lúc 11:371 gold badge3 silver badges15 bronze badges
ombkombk
def digit[n]:
even = 0 # Sum of even numbers
odd = 0 # Sum of odd numbers
while [n!=0]:
digit = n%10 # Get the right most digit of the number
if digit % 2 == 0: # Check if the digit is even or odd
even = even + digit
else:
odd = odd + digit
n//=10 # Remove the digit from the number
return even - odd
n = 412
print[digit[n]]
2.0281 Huy hiệu vàng3 Huy hiệu bạc15 Huy hiệu đồngNov 24, 2020 at 11:39
Tôi không chắc ý nghĩa của vòng lặp cho vòng lặp. Nhưng đây là một ví dụ về những gì bạn có thể làm thay thế. Loại bỏ vòng lặp cho và đi qua từng chữ số cho đến khi n == 0.Sandsten
Đã trả lời ngày 24 tháng 11 năm 2020 lúc 11:393 silver badges16 bronze badges