2012-07-16 2 views
-1

파이썬 코드 작성에있어 아직 새로운 편이어서 파이썬 코딩 클래스의 제 5 장에 불과합니다. 이를 염두에두고 사용자가 양수 대신 음수를 입력 할 때까지 "while 루프"를 사용하여 합계 계산기를 만들려고합니다. 내가 여기에 정확한 숙제 문제를 게시 할 예정입니다 내 질문의 내 설명에 완전히 명확하지 않다 경우파이썬에서 while 루프 계산 계산기를 수정/수정하는 데 도움이 필요합니다.

:

제 5 장, 200 페이지, # 숫자의 8 합계

이 프로그램을 쓰기 while 루프는 사용자에게 일련의 양수를 입력하도록 요청합니다. 사용자는 시리즈 종료를 알리기 위해 음수를 입력해야합니다. 모든 양수가 입력 된 후 프로그램은 합을 표시해야합니다. 11 행에서

def main(): 
    number = float(input('Please enter in a positive number: ')) 
    while number > 0: 
     positiveNumber() 
    while number < 0: 
     calculateTotal() 
     printTotal() 

def positiveNumber(): 
    number = float(input('If you are finished please enter a negative number.' + \ 'Otherwise, enter another positive number: ')) 
    while number > 0: 
     positiveNumber() 
    while number < 0: 
     calculateTotal() 
     printTotal() 

def calculateTotal(): 
    total = 0 + number 

def printTotal(): 
    print('The sum of your numbers is: ', total) 

main() 
  • , 나는 내가 가지고하기 위해이 공간을 입력하고 싶었 때문에이 \ "+"기호를 가지고 : 내가 지금까지 작성한 코드에 대한 지금

    더 깔끔한 텍스트를 볼 수는 있지만 작동하지 않는 것 같습니다.

이 질문에 "nooby"가 표시되면 사과하지만 청소기/계산 계산기를 만드는 데 도움이 필요합니다. 누군가이 코드를 살펴보고 개선 할 수 있다면 크게 감사하겠습니다. 고맙습니다!

최종 편집 :

유익한 답변을 보내 주셔서 감사합니다. 나는 많은 것을 배웠다 ("뉴비"=). 나는 내 계산기에 Talon876의 대답을 사용했다. 모두에게 다시 한 번 감사드립니다!

+1

그래서 ... 어떤 부분이 고장 났습니까? –

+0

nooby, 정말 "초보자"입니다 :-) – Levon

+0

입력은 나쁜 생각입니다 ... 대신 raw_input을 사용하십시오. –

답변

3

단일 문자열을 여러 줄에 인쇄하려면 \n을 문자열에 넣으십시오. 예를 들어 ,

print "This is on the first line\nThis is on the second line" 

것 출력

This is on the first line 
This is on the second line 

당신이 (자체 내에서 메소드를 호출) 재귀 동안 루프를 혼합하는 것 같습니다. 사용자가 입력 할 때까지

sum = 0 
number = float(input('Please enter in a positive number: ')) 
while number > 0: 
    sum = sum + number 
    number = float(input('If you are finished please enter a negative number.' + \ 'Otherwise, enter another positive number: ')) #fix this line using the information from the first part of the answer 

이 의지 루프 : 루프 및 입력 변수는 차단 상태를 확인하는 동안 나는

그것은 다음과 같이 보일 것이다 (입력이 < 0이다) 하나를 사용하는 것이 좋습니다 것입니다 0을 양수로 사용하려면 while 조건을 number > -1

1

으로 변경하십시오. 명시 적으로 전역 변수로 선언하지 않고 파이썬 함수에서 전역 변수를 업데이트 할 수 없습니다. 관찰 :

a = 1 
def foo(): 
    a = a + 6 #creates a new variable (a) that is confined to the "foo" namespace. 
      #Note that it still uses a from the global namespace on the Right hand side 
      #This is because python looks for a in the "foo" namespace first. When 
      #it isn't found there, it looks in the global namespace. However, python 
      #WON'T ASSIGN to something in the global namespace without being told 
      #to explicitly 
    print (a) 

foo() # 7 
print (a) # 1 

def foo(): 
    global a #Tell python that it is OK to assign to variable "a" in the global namespace. 
    a = a + 6 
    print (a) 

foo() # 7 
print (a) # 7 

그러나 위대한 힘은 큰 책임입니다. 많은 사람들이 에 전역 변수을 절대로 사용하지 않을 것이라고 말합니다. 많은 방법들에서, 전역 변수로 달성 할 수있는 것은 단지 다른 어떤 방법을 사용하여보다 깨끗하게 달성 할 수 있기 때문에 정확합니다.이 글을 쓰는 나의 희망은 전역 변수를 사용하도록 설득하는 것이 아니라 코드의 오류 중 하나를 이해하는 데 도움이되는 것입니다.

시도해 볼 수있는 한 가지 방법은 함수가 입력 된 숫자를 인수로 받아 들이고이 총계와 함께 합계를 계산 한 다음 return 새 합계를 사용하는 것입니다.

행운을 빈다.

0

문제는 1.you 2.you

루프 당신이를 호출하여 구현하는 경우 동안 필요가없는 그들에게 만들어지고 변경 사항을주의하는 것이 글로벌로 함수에서 사용하는 변수를 선언하지 않은됩니다

def main(): 
total=0 
number = float(input('Please enter in a positive number: ')) 
while(number>0): 
    total=total+number 
    number = float(input('Please enter in a positive number to continue or a negative no. to stop: ')) 
print('The sum of your numbers is: %d'% total) 
main() 
+1

여기에 재귀 적으로 아무것도 호출하지 않습니다. – mgilson

0

난 당신이 이런 식으로 뭔가를 찾고 생각! 여기 "다른 & 경우" 는 동안 루프 문제를 쉽게 구현이 함수를 반복적으로 사용하면 조건 사장님 확인이 필요하세요? 그러나 어떤 스타일 제약 조건을 사용해야하는지는 알지 못합니다.

number = float(input('Please enter in a positive number: ')) 
to_sum = [] 
while number > 0: 
    to_sum.append(number) 
    number = float(input('If you are finished please enter a negative number.\n' + 
         'Otherwise, enter another positive number: ')) 
print('The sume of your numbers is: ', sum(to_sum)) 

여러 행으로 나누려고하는 문장이 이미() 안에 있기 때문에. 선을 깰 수 있습니다.

과제가 너무 많은 미친 기능을 사용해야합니까? 또한 어떤 Python 버전을 사용하고 있습니까?

0

당신이 배울 필요가있는 한 가지는 프로그램으로 기능을 나누는 것입니다. 일부 문제는 분할하는 것보다 단일 코드 블록에서 처리하는 것이 더 좋으며이 문제 중 하나라고 생각합니다.

하나의 합계를 계산해야합니다. 사용자가 입력 할 때 더 많은 숫자를 추가하는 단일 변수로이를 처리 할 수 ​​있습니다. 이 변수를 중심으로 코드를 설계해야합니다. 코드를 함수로 분리하려고하면 전역 변수 (권장하지 않음!)를 사용해야하거나 함수 사이에 변수를 전달해야합니다. 그렇지 않으면 변수를 객체에 넣은 다음 함수는 객체에 대한 "메소드"함수가됩니다. 그러나 가장 단순한 것은 변수를 사용하는 코드를 작성하고 모든 코드를 단일 코드 블록 (하나의 함수 또는 Python 프로그램의 코드)으로 작성하는 것입니다.

sum = 0.0 # initial value; we will add values to this 
print('Welcome to this program') 
while True: 
    s = input('User: enter data value or a negative number to stop') 
    x = float(s) 
    if x < 0: 
     break 
    sum += x # add this value to update the sum 
print('Here is your sum: {}'.format(sum)) 

그래서, 여기에 위의 코드에 대한 좋은 것입니다 : 여기

는 솔루션입니다. 변수 sum으로 작업해야하는 모든 장소가 모두 가까이 있으며, 우리는 그 장소를 볼 수 있습니다. sum을 전역으로 선언 할 필요가 없습니다. 우리는 여러 기능을 모두 사용하려고하지 않기 때문입니다.

코드를보고 스스로에게 묻습니다. 여러 기능을 사용하면 더 간단하고 깨끗합니까? 그렇지 않다면,하지 마십시오.

유일한 까다로운 점은 루프에 while True:을 사용했기 때문입니다. 이것은 우리가 무언가를하고 (결과를 얻고), 결과에 따라 루프에서 빠져 나갈 것인지 아니면 계속할 것인지를 결정한 다음 최종 결정을 기반으로 다른 작업을 수행하기를 원하기 때문입니다.

그것은이가 "플래그"변수를 사용하여 재 작성, 루프 while flag:을하는 것이 가능하지만, 나는 청소기 생각하지 않는다 :

sum = 0.0 # initial value; we will add values to this 
print('Welcome to this program') 
continue_loop = True 
while continue_loop: 
    s = input('User: enter data value or a negative number to stop') 
    x = float(s) 
    if x < 0: 
     continue_loop = False 
    else: 
     sum += x # add this value to update the sum 
print('Here is your sum: {}'.format(sum)) 

당신이 그것을이 continue_loop 플래그를 가지고 명확 생각하십니까 변하기 쉬운? 일부 교과서에서는 break을 사용하여 가운데 루프를 종료하는 것이 죄라고 생각하기 때문에이 방법으로 코드를 작성해야한다고 말합니다. 그들은 루프가 보통 장소 (단지 while 루프의 경우 상단)에서 빠져 나가야한다고 생각합니다.

정말 기능을 사용하고 싶다면 어떻게해야합니까? 음, 할 수 있겠지만 여전히 전역 변수를 사용하면 안됩니다. 실제로 "기능적"솔루션을 작성하는 경우 sum 변수가 전혀 필요하지 않습니다!

여기 기능적인 해결책이 있습니다.

def ask_and_sum(): 
    s = input('Hey dude enter a value or a negative to stop') 
    x = float(s) 
    if x < 0: 
     return 0 
    else: 
     return x + ask_and_sum() 

print('Welcome to this program') 
print('Your sum is: {}'.format(ask_and_sum())) 

명시 적 루프 대신 "tail recursion"을 사용합니다. 여기서 함수는 다른 호출로 끝납니다. 이 경우 나는 개인적으로 명시적인 루프를 선호한다. 어떻게 생각해?

P. 이 문제는 너무 간단하여 완전한 답을주지 않고 논의하기가 어려웠습니다. 나는 그것을 사과한다. 그러나 코드를 복사하더라도 코드를보고 생각하고 코드를 이해하는지 확인하십시오.

관련 문제