최근 파이썬을 배우고 있는데 C시리즈 언어에 푹 빠진 사람으로서 버려야 할 문제와 다시 이해해야 할 문제가 많다
#coding=utf-8 global n, m, k, edge, head, dis, stack, vis, nMax, mMax, inf nMax = 100 mMax = 10000 inf = 1e+10 class e(object): pass n = 0 k = 0 m = 0 eg = e() edge = [] head = [0] dis = [0] stack = [0] vis = [0] def addedge(a, b, c): global k, edge, head ed = e() ed.u = a #you can delect it ed.v = b ed.w = c ed.next = head[a] edge.append(ed) head[a]=k k+=1 pass def spfa(): global n, m, k, edge, head, dis, stack, vis,inf i = top = 0 for i in range(0 , n): dis[i] = inf vis[i] = 0 dis[0] = 0 vis[0] = 1 top+=1 stack[top] = 0 while(top!=0): u = stack[top] top-=1 i = head[u] while(i!=0): v = edge[i].v if dis[v] > dis[u]+edge[i].w: dis[v] = dis[u]+edge[i].w if(vis[v]==0): vis[v] = 1 top+=1 stack[top] = v i = edge[i].next vis[u] = 0 pass if __name__ == '__main__': u = v = l = i = 0 for i in range(0,nMax): head.append(0); dis.append(0) vis.append(0) stack.append(0) while(1): na = input() n = int(na) ma = input() m = int(ma) edge=[0] k = 1 for i in range(0,n): head[i] = 0 for i in range(0,m): ua = input() va = input() la = input() u = int(ua) v = int(va) l = int(la) addedge(u,v,l) spfa() for i in range(1,n): print(dis[i])
발생하는 문제에 대해 이야기해보자.
1 Python 목록의 길이는 고정되어 있지 않습니다. 고정된 위치에서 요소를 읽어야 하는 경우 해당 위치가 비어 있지 않은지 확인해야 합니다
2 Python은 "++" 및 "num[index++" in c++ ]"를 지원하지 않습니다. 이 방법은 여기서는 작동하지 않습니다
3 입력 유형 int 값을 먼저 입력한 다음 int로 강제 변환해야 합니다. ()
4 전역 변수는 전역으로 선언해야 하고 함수에서도 전역 선언을 사용해야 합니다. 전역 문을 사용하세요
5 아주 이상한 얘기를 해보자
''' Created on 2014年7月5日 @author: bbezxcy ''' global stu,k class student: pass stu = [] def addStudent1(nm ,ag): global stu,k stu[k].name = nm stu[k].age = ag k+=1 pass def addStudent(nm ,ag): global stu,k stu[k].name = nm stu[k].age = ag k+=1 pass if __name__ == '__main__': num = 0 k = 0 strn = input("请输入学生人数") num = int(strn) ss = student() for i in range(0 ,num): stu.append(ss) for i in range(0 ,num): nm = input() ag = input() addStudent(nm ,ag) for i in range(0,num): print(stu[i].name) print(stu[i].age)
목록에 학생 정보를 삽입하는 간단한 프로그램입니다. 그런데 실행하면 마지막에 삽입한 값이 이전 학생 정보 값을 덮어쓰는 것을 볼 수 있습니다
인쇄 결과는 다음과 같습니다
请输入学生人数3 zys 20 xcy 19 ghz 20 输出结果 ghz 20 ghz 20 ghz 20
addtudent를
Python으로 변경 코드
def addStudent(nm ,ag): global stu,k s = student() s.name = nm s.age = ag stu.append(s) k+=1 pass
문제 해결 후