문제

내가 사용하고 거북이는 모듈에서는 파이썬을 그리는 미국의 국기를 사용하여 별도의 기능은,첫째가 draw_flag 계산하는 모든 차원,다음 draw_rectangle 는 실제로 그립니다 국기 모양,그리고 악을 만들 draw_stars,etc.,을 그리는 스타와 라인입니다.

하지만,나는 데 문제가 조금 이해하는 방법에 대한 기능이 작동합니다..여기에 내 코드는 지금까지:

import turtle
import time
import random

def draw_rectangle(length, height):
    turtle.up()
    x = length
    y = height

    turtle.begin_fill()
    turtle.setpos(x,y)
    turtle.down()
    turtle.forward(418)
    turtle.right(90)
    turtle.forward(220)
    turtle.right(90)
    turtle.forward(418)
    turtle.right(90)
    turtle.forward(220)
    turtle.end_fill()

    turtle.sleep(2)
    turtle.bye

def draw_flag(A):
    height = int(A)
##    length = height*1.9
##    union_height = height*(7/13)
##    union_length = length*(2/5)
##    E = F = union_height/10
##    G = H = union_length/12
##    stripe_width = height/13
##    diameter_star = stripe_width*(4/5)
    length = height*1.9
    return

A = input("Please enter the height of the flag: ")

draw_rectangle(length, height)

는 반환에 의해 그리기 사각형,그러나 그것은 말하기를 계속 길이 정의하지 않는 곳이 확실하지 않을 장소'길이'어디 그것을 인식하고 있습니다.

내가 사용하는 파이썬 3,감사합니다.

도움이 되었습니까?

해결책

여기에는 좋은 방법은 그것에 대해 생각합니다.함수는 블랙박스에 소요되는 일부의 수 값을,불 인수, 에서 특정 주문가들과 함께하는 생산 다른 값입니다.내가 말할 때"검은 상자에"나는 것을 의미할 때 사용하여 기능,지 관리 는 방법 그것은 그것이 무엇을,당신은 단지 그것의 일부 값은 값을 얻고 다시.

하자 고려는 아주 간단한 함수는 다 빼 두 번호어:첫 번째 마이너스 두 번째입니다.다시 말해서,우리는 함수를 구현하는 규칙"argument#1-argument#2." 지금,당신이 쓰는 코드가 이 기능을 위해,당신은 몇 가지 방법이 필요를 말하는 컴퓨터를 사용하려면 argument#1 을 사용하고 싶을 때 argument#2.에서 다른 프로그래밍 언어,당신이 그것에 의해 명시적으로 수 지정의 인수를 사용할(#1#2)지만,그것은 많은 쉽게 쓰기 코드를 줄 수 있는 경우 이러한 값이 이름이 있습니다.그래서 Python,다음과 같은 다른 언어들 수 있습니다,당신은 참조를 인수의 함수를 사용하여 이름이 있습니다.예를 들어,당신이 원하는 인수#1 가 이름 x, 고,#2 가 이름 y.당신을 나타낼 수 있는 작성하여 이:

def subtract(x, y):

이 다음에는 코드를 구성하는 기능입니다.에 대한 빼기를 들면,그것은 것

def subtract(x, y):
    return x - y

When Python 컴파일러를 만남이,변환 코드를 내부 표현을"값을 계산#1-값#2 보내는 다시 내한 디자인을 자랑합니다." 그런 다음을 차단하는 코드 및 저장 밑에 그것을 이름 subtract (기 때문에 그게 당신이 말한 그것은 당신의 이름을 함).

희망이 그것은 일단 이러 블록의 코드를 실행이 완료되면,그것은 더 이상 어떤 의미하기"를 참조하십시오 argument#1"또는"인수#2,"할 수 없기 때문가하지 않고 인수 함수!그래서 마찬가지로,한 번의 기능을 것 레이블에게 주신을 인수 xy, 더 이상 어떤 의미입니다.라벨에만 존재하는 기간에 대한 기능의 코드입니다.이 범위:제한하는 라벨이 부분의 코드 그들이 뭔가 의미.

기 때문에 라벨 xy로컬의 범위, 중 하나로 말할 수 있는 방법에 있는 그것도 문제를 만들 수 있습니다.예를 들어,만약 당신이 그의 정의 subtract 코드에서,당신은 수 있는 임의로 결정을 변경할 firstsecond, 며,모든 것을 변경하는 것은 코드 내에 있는 하나의 기능입니다.당신은 단지 정의를 변경하기

def subtract(first, second):
    return first - second

그리고 그것의 코드입니다 기능적으로 정확히 동일합니다.다른 곳에서 하는 프로그램 xy 가 발생들이 참조하는 다른 무언가가 이 인수의 이 함수,그래서 당신은 당신을 변경할 필요가 없습니 그들을 이름을 변경하는 경우 arguments.

에서 어떤 일이 일어나고 있는 경우는 당신이 시도를 사용하여 라벨 length 어딘가에 외부의 함수 정의된 대해(즉,함수는 당신이로 저장 draw_rectangle).Python 있다는 것을 알고 계신할 수 없을 참조하여 인수의 함수하지 않은,그래서 그것은 당신이 기대하는 이미 정의 length 을 다른 것을 의미한다.하지만 당신은하지 않았다.그 이유는 당신은 오류가 있습니다.(물론,는 하나의 오류,어쨌든)

다른 팁

당신은이 두 가지 문제가 발생합니다.첫째,당신이 정의하는 기능 draw_flag 하지만 당신은하지 않습니다.

그러나,당신이 그랬다면 그것을 호출,그것은 작동하지 않을 것이기 때문에,당신의 기능 draw_flag 지 않는 정말 아무것도하지.그것은 단지 일부를 정의 변수는 내부 자체 및 그들을 멀리 할 때 그것은 종료됩니다.반드시 당해 이용자의 길이와 높이와 함께 return length, height, 다음 length, height = draw_flag(A) 와 전화 draw_rectangle 으로 해당 값이 적용됩니다.(또는 할 수 있는 draw_rectangle(*draw_flag(A)).)

length, height = draw_flag(A)
draw_rectangle(length, height)

기능하지 않는 마술로 통신합니다.이 함수는 입력 및 생산하는 반환 값.사용하려는 경우에는 반환 값이 어딘가에,당신은 당신을 호출해야 함수는 장소에서 사용할 값으로 설정합니다.

당신은 당신을 호출 기능 draw_rectangle, 는 예상하는 두 개의 인수 길이와 높이입니다.길이가에 의해 계산 draw_flag 기능하지만 당신은하지 않는 값을 반환합니다.

당신은 몇 가지 해결하는 방법이다.하나는 단순히 전화 draw_flag 기능으로 사용자에 공급,높이를 반환 값을 저장할,그리고 그런 다음 전화 draw_rectangle:

def draw_flag(A):
    height = int(A)
##    length = height*1.9
##    union_height = height*(7/13)
##    union_length = length*(2/5)
##    E = F = union_height/10
##    G = H = union_length/12
##    stripe_width = height/13
##    diameter_star = stripe_width*(4/5)
    return height*1.9

A = input("Please enter the height of the flag: ")
length = draw_flag(A)
draw_rectangle(length, int(A))

다른를 이동하는 것입 inputdraw_flag 기능,그리고 그런 다음 전화 draw_rectangle 기능 안에서 draw_flag 기능입니다.이렇게 하면,다음 draw_flag 기능이 필요하지 않 인수를 모:

def draw_flag():
    A = input("Please enter the height of the flag: ")
    height = int(A)
##    length = height*1.9
##    union_height = height*(7/13)
##    union_length = length*(2/5)
##    E = F = union_height/10
##    G = H = union_length/12
##    stripe_width = height/13
##    diameter_star = stripe_width*(4/5)
    draw_rectangle(height*1.9, height)

draw_flag()

나는 당신을 생각해야한을 통해 이동하는 파이썬 책의 섹션에서 변수 범위 등이 있습니다.도움이 될 것입니다 나중에 때 당신은 어떤 변수를 인쇄하지만 이상한 오류는 특히 사용하는 경우에는 기능입니다.

다음을 시도하십시오

import turtle
import time
import random

def draw_rectangle(length, height):
   turtle.up()
   x = length
   y = height

   turtle.begin_fill()
   turtle.setpos(x,y)
   turtle.down()
   turtle.forward(418)
   turtle.right(90)
   turtle.forward(220)
   turtle.right(90)
   turtle.forward(418)
   turtle.right(90)
   turtle.forward(220)
   turtle.end_fill()

   turtle.sleep(2)
   turtle.bye

 def draw_flag(A):
   height = int(A)
   length = height*1.9
   draw_rectangle(length,height)
   return

A = input("Please enter the height of the flag: ")

draw_flag(A)
.

괜찮으므로 더 일반적인 질문에 답하기 위해 Python의 함수는 인수를 호출 할 때 인수를 허용합니다. 즉, 참조로 전달됩니다. 즉, 호출 공간에서와 같이 함수 내의 동일한 데이터로 끝납니다. 이는 함수 내에서 변경되면 기능 외부에서 변경되기 때문에 변경 가능한 유형에 중요합니다. (str, int, float 및 튜플은 변경할 수없고 dict 및 list가 아닙니다). 함수가 반환되면 리턴 토큰이 발신자에게 다시 전달되므로 a=input('input? ')라고하는 경우 함수 입력은 사용자에게 표시 할 프롬프트에 대한 인수를 가져옵니다. 참고로 통과합니다. 문자열의 사본. 사용자가 생성 된 사용자 생성 입력을 반환합니다. 함수에서 여러 값을 반환 할 수 있으며 자동으로 튜플로 변환됩니다.

가있는 경우
def test():
    return 1,2
a,b = test()
.

= 1 및 b= 2를 얻을 수 있습니다. 함수 내에서 사용 된 이름을 정의해야합니다. 그들은 먼저 함수 안에서 첫 번째 내부에서 찾고 마침내 내장 된 네임 스페이스에서 로컬 네임 스페이스 나 부모가 아니기 때문에 다른 기능에 정의 된 변수를 사용할 수 없습니다. 이 이름의 값에 액세스하려면 함수에이를 전달해야합니다. 함수 내에서 사용 된 이름은 함수 외부의 이름과 일치하지 않아도됩니다. 고려 :

def fun1(a):
    return a * 2
def fun2():
    b = 5
    c = fun1(b)
    print c
fun2()
.

값 5는 이름 B 아래에 메모리에 저장된 다음 FUN1으로 참조로 전달됩니다. 이름 A 이름에서 이번에는 두 배로 늘어나고 반환됩니다 (리턴은 참조로 참조), 반환 값은 저장됩니다. 그런 다음 인쇄 된 C라는 이름으로 인쇄됩니다.

return 반환한다 다시 발신번호를 입력하실 수 있습니다.가 자동으로 만들기 지역 변수의 내부 기능 사용할 수 있는 외부(이러한 한 이유!).너무 Note return 없이 모든 인수를 반환하는 특별한 가치 None (그래서 그것은 상당 return None).

그래서,당신은 일부를 반환하는 값,사용 return height, length 기능,내부 및 height, length = draw_flag(A) 외부.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top