>source

여기 파이썬 초보자, 아마도 간단한 질문을 할 것입니다. 기본적으로 나는 이와 같은 소리를 낸다. a.txt의 각 줄은 응답자가 a, b, c (1,2,3)로 응답 할 수있는 질문을 나타냅니다. 예를 들어 1 행은 1 2 1 1 3 3입니다. 3 개의 질문이 있습니다 (obv 라인도). 저의 임무는 모든 질문에 대해 가장 일반적인 답변을 찾는 것입니다. 내 코드를 보편적으로 만들고 싶었습니다. a.txt는 추가 질문과 답변으로 수정할 수 있습니다. 지금까지 나는 이것을 얻었다 :

for l in range(sum(1 for line in open('a.txt'))):
  a, b, c = 0, 0 ,0
  with open("a.txt") as subor:
    o=[int(i) for i in subor.readline().split()]
    for k in range(len(o)):
      if o[k] == 3:
       c = c+1
      elif o[k] == 1:
        a = a + 1
      else:
        b = b + 1
    if a > b and a > c:
      print("In question", l + 1 ,'is answer A the most common one')
    elif c > b and c > c:
      print("In question", l + 1 ,'is answer C the most common one')
    elif a == b or a == c:
      print("Cannot be decided")
    else:
      print("In question", l + 1 ,'is answer B the most common one')
    a, b, c = 0, 0 ,0
    o.clear()

코드는 작동하지만 첫 번째 질문에 대한 가장 일반적인 답변 만 찾고 다음 질문으로 이동하지 않습니다. 다음 질문으로 이동하려면이 코드를 어떻게 수정해야합니까?

  • 답변 # 1

    라인을 실행할 때마다 for 루프에서 with open("a.txt") as subor: 파일을 다시 엽니 다. 따라서 파일의 첫 번째 줄을 subor.readline() , 그런 다음 for 루프의 다음 반복에서 파일을 다시 엽니 다. 다음 부분에도 몇 가지 오류가 있으므로 수정했습니다.

    with open("a.txt") as subor:
        lines = subor.read().splitlines()
        l = 0
        for line in lines:
            o = [int(i) for i in line.split()]
            a = len([x for x in o if x == 1])
            b = len([x for x in o if x == 2])
            c = len([x for x in o if x == 3])
            if a > b and a > c:
                print("In question {} is answer A the most common one".format(l + 1))
            elif b > a and b > c:
                print("In question {} is answer B the most common one".format(l + 1))
            elif c > a and c > b:
                print("In question {} is answer C the most common one".format(l + 1))
            else:
                print("Question {} cannot be decided".format(l + 1))
            l += 1
    
    

관련 자료

  • 이전 javascript - typescript에서 객체 배열 정렬 오류, 올바른 순서가 없습니다 (slice () 작업 사용)
  • 다음 백엔드 서버 및 앱을 NET Core 31 signalR로 마이그레이션 한 후 SignalR이 XamarinForms Android 앱에서 작동을 중지합니다