Giúp đỡ cách tìm vị trí của kí tự thứ n trong một chuỗi cho trước

Chào các bạn!

Mình mới học Python được hai hôm. Có một bài tập về hàm lặp như bên dưới mong các bạn giúp đỡ :frowning:

Đề bài:

Ta có chuỗi sau: str = ‘Dai học Bach Khoa Ha noi’
Yêu cầu:
Tìm vị trí của ký tự ‘a’ thứ ba trong chuỗi trên.

P/s: Ngoài ra mình cũng được gợi ý dùng split() để giải bài này nhưng rất tiếc là cũng chưa nghĩ ra :frowning:

Hỏi nhỏ, nếu bạn là người phải tìm vị trí của chữ a thứ 3 trong chuỗi trên mà không phải bất kì cái máy nào thì bạn sẽ làm như thế nào, đừng nghĩ đến code vội

3 Likes

Có lẽ mình sẽ đếm :slight_smile:

That’s right, thuật toán để giải bài này cũng chính là đếm.
Lấy từng kí tự tại mỗi vị trí và so sánh khi nào được kí tự a thứ 3 thì xuất kết quả ra

5 Likes

Nhưng vấn đề ở đây đáp án phải là “ví trí” của kí tự bạn ạ :frowning:

  • Tạo 1 biến đếm khởi tạo = 0
  • Duyệt chuỗi
    • Gặp kí tự a thì biến đếm++,
    • Nếu biến đếm = 3 không duyệt nữa đồng thời lấy vị trí của kí tự a đó
2 Likes

Từ mảng arr =‘Dai hoc Bach Khoa Ha noi’
Bạn tạo 1 mảng arrB gồm index của tất cả các kí tự a. rồi in ra arrB(2) :>
Theo ngu kiến của mình là vậy

1 Like

Thật sự là ý tưởng của mình cũng tựa tựa như này. Tuy nhiên có thể do code gà nên vẫn chưa thành công :frowning:

#Thế này được k?
arr = "Dai hoc Bach Khoa Ha noi"
print [i for i in range(len(arr)) if arr[i] == 'a'][2]
3 Likes

Đếm thì phải nhớ kết quả lại rồi chứ nhỉ, cách bạn đếm ngoài thực tế như thế nào thì áp dụng vào code là ra

2 Likes

bạn viết 1 vòng for in ra từng ký tự của str được thì bài này thêm 1 dòng if nữa là ra thôi

2 Likes

1 cách viết khác trong python

str = 'Dai học Bach Khoa Ha noi'
c = 'a'

print( [pos for pos, char in enumerate(str ) if char == c])

tương đương

for position,char in enumerate(str):
    if char=='a':
        print position
5 Likes

cú pháp Python lạ nhỉ :grin:

Viết đúng kiểu Python (Pythonic) thì ko có mấy câu for(i=…)

4 Likes

có thể hiểu là bạn tạo 1 array chứa từng phần tử trong cái chuỗi dhbkhn kia tam gọi là array a
tạo 1 biến count = 0
duyệt từng phần tử trong array đó a[i] từ i =0 đến i < array leng
nếu gặp bất kì thằng a[i] nào có value = a thì tăng biến count lên 1 , k thì duyệt tiếp
đến khi count = 3 thì in ra thằng a[i]

1 Like
array="Dai hoc Bach khoa HN"
i=0
dem=0
while(dem<3) :
	if array[i]=="a":
		dem+=1
		vt=i
	i+=1

print("vi tri %d"%vt)

trong python có hàm positionF = line.index(“F”) hỗ trợ nè bạn.

Phương thức này sẽ văng ValueError (ko hay, vì ko đáng để throw :smiley: ), dùng find sẽ ra -1.

2 Likes

Bạn có thể sử dụng for i in range trong python để giải quyết bài toán này như sau:

arr = "Dai hoc Bach Khoa Ha noi"
đếm = 0

#sử dụng vòng lặp for i in range để tìm ký tự trong chuỗi
for i in range(len(arr)):
    # so sánh ký tự có index i với "a", nếu bằng thì tăng đếm đến 3
    if arr[i] =="a": 
        đếm+=1
        if đếm == 3: #nếu biến đếm bằng 3 thì in ra kết quả và thoát vòng lặp
            print(i)
            break

Kết quả: 16
Nguồn : For in range python và vòng lặp với số lần cụ thể | Lập trình căn bản -Học lập trình theo phong cách Nhật Bản

1 Like

Không hay vì nó tìm được mỗi 1 kí tự đầu thôi.

# range(len()) lâu gấp đôi
# đến tự mình i += 1 còn nhanh hơn

for i, c in enumerate(s):
   if c == 'a':
      count += 1
      if count == 3: break
print(i if count == 3 else "Not Found")
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?