2014-04-18 4 views
0

회로의 저항을 계산하는 코드를 만들었습니다. '직렬'과 '병렬'사이의 각 변경을 '부품'으로 간주 한 다음 부품 수, 각 부품의 저항 수 및 각 저항의 저항을 제공합니다.파이썬 코드가 제대로 작동하지 않습니다.

문제는, 내가 그것을 실행 때마다, 그것은 'P'에 걸립니다
def resistance(): 
    p = int(input('Enter number of parts. One "part" is a resistor or sequence of resistors that are in parallel while the rest are in series, or vice versa.')) 
    for x in range(1, p): 
     n = input('Enter number of resistors in part' + x) 
     for y in range(1, n): 
      w = input('Enter the resistance of resistor #' + y) 
      q.append(w) 
     t = str(input('In series or parallel? Enter S for series, P for parallel.')) 
     if t == 'S': 
      for z in range(1, len(q)): 
       s += q[z-1] 
     elif t == 'P': 
      for v in range(1, len(q)): 
       s += (1/q[z-1]) 
     q = [] 
    return s 

후 다음과 같은 오류를 제공합니다 :

나는 S의 = 설정하면 할당

전에 참조 된 지역 변수의 ' 0 첫번째 루프가 시작되기 전에 'p'를 취한 다음 0을 반환합니다.

어디에서 잘못 되었습니까?

편집 : 위의 문제는 해결되었지만 이제는 새로운 문제가 있습니다. 다음과 같이 코드는 : 그것은 시리즈에서 작동

def resistance(): 
s = 0 
q = [] 
p = int(input('Enter number of parts. One "part" is a resistor or sequence of resistors that are in parallel while the rest are in series, or vice versa. ')) 
p += 1 
for x in range(1, p): 
    n = int(input('Enter number of resistors in part ' + str(x) + ':')) 
    n += 1 
    for y in range(1, n): 
     w = input('Enter the resistance of resistor #' + str(y) + ', in ohms:') 
     q.append(w) 
    t = str(input('In series or parallel? Enter S for series, P for parallel. ')) 
    if t == 'S': 
     for z in range(1, len(q)+1): 
      s += int(q[z-1]) 
    elif t == 'P': 
     for v in range(1, len(q)+1): 
      s += int(1/int(q[z-1])) 
    q = [] 
return s 

하지만, 동시에 그것은 말합니다 : - 나는 '시리즈의'부분과 거의 같은 일을했고,이 오류가 없다고하지만. 도움을 받으실 수 있습니다.

+0

'if/elif' 조건 중 하나에서'len (q)'를 출력하고 그 조건을 선택하십시오. 's = 0'이 필요합니다 - 그래서 UnboundLocalError를 얻는 것입니다. 변수를 더 나은 이름으로 지정하는 것이 더 쉬울 것입니다. 'q'는 어디에서 오는 것입니까? 게시 한 코드에는 설정되지 않았습니다. –

+0

'p'를 _just_ 가져 가지 않습니다. 또한'TypeError : 4 행에서 'str'과 'int'objects를 연결할 수 없습니다. 주위에'try-catch'가 있습니까? – user58697

답변

0

코드에서 몇 가지를 변경해야합니다. 먼저 s=0 변수와 q = [] 목록을 초기화하십시오. 당신이 두 개의 정수는 결과가 두 개의 정수를 추가 n

n = input('input number')+x, 그래서 정의 추가하려면 입력으로는, 문자열 '을 입력 ...'와 정수 x,y을 추가하려고합니다. 또한 직렬 또는 병렬 입력을 할 때 S가 정의되지 않았거나 정의되지 않았다는 오류가 발생하면 대신 raw_input을 사용하여이 문제를 해결할 수 있으며 S 또는 P 입력은 문자열로 변환됩니다. 다음은 코드입니다 :

def resistance(): 
    s = 0 
    q = [] 
    p = int(input('Enter number of parts. One "part" is a resistor or sequence of resistors that are in parallel while the rest are in series, or vice versa. ')) 
    for x in range(1, p): 
     n = input('Enter number of resistors in part ')+x 
     for y in range(1, n): 
      w = float(input('Enter the resistance of resistor # '))+y 
      q.append(w) 
     t = raw_input('In series or parallel? Enter S for series, P for parallel. ') 
     if t == 'S': 
      for z in range(1, len(q)): 
       s += q[z-1] 
     elif t == 'P': 
      for v in range(1, len(q)): 
       s += (1/q[v-1]) 
     q = [] 
    return s 

def test(): 
    print resistance() 
if __name__=='__main__': 
    test() 
+0

이제는 다음과 같은 오류가 발생합니다 : n = input ('부분 저항 값 입력') + x TypeError : 'int'객체를 str 암시 적으로 str으로 변환 할 수 없습니다. – user3397827

+0

Try, int (input ('...')) + x. 어떤 버전의 파이썬을 사용하고 있습니까? import sys와 sys.version을 사용하여 확인하십시오. – RDizzl3

+0

파이썬 3.3을 사용하고 있습니다. 그것은 int (입력 '(' '+ str (x) +': ') 부분의 저항 수를 입력하십시오.) – user3397827

관련 문제