여기에 그 방법이있다.
import sys
def shell_print(txt, *args):
out = txt.split("%s")
# vars = [*args] # See comments
vars = list(args)
for t in out:
sys.stdout.shell.write(t)
if vars:
v = vars.pop(0)
sys.stdout.shell.write(*v)
my_name = ("Bob", "STRING")
friends_name = ("Jeff", "KEYWORD")
question = "My name is %s in green and my friend's name is %s in red"
shell_print(question, my_name, friends_name)
그것은 단지 QAD (신속하고 더러운) 솔루션을, 그리고 단지 "%s"
함께하지만, 그 시작. 첫 번째 매개 변수는 %s
자리 표시자를 포함하는 문자열이며, 다음 매개 변수 (그 수에 관계없이)는 해당 속성이 포함 된 변수를 삽입합니다.
편집 :
["My name is ", "in green and my friend's name is", "in red"]
: 기본 원리는 먼저 우리가 (예에서)이 같은 목록 (
out
)를
txt
에 문자열을하고
%s
년대 주위를 분할, 그래서 우리가 함께 남아있는 것입니다
그런 다음이 목록을 반복 (반복)합니다. out
의 다음 요소를 작성한 후 args
의 첫 번째 요소 인 튜플을 봅니다. 하나가 있다고 가정하면이 두 튜플 요소를 write()
에 전달합니다.
sys.stdout.shell.write(*v)
*
다음은 두 개의 인수를 전달합니다 v
라는 튜플의 두 요소가있는 경우 는, 즉,을 풀고 않습니다.
args
을 목록으로 변환하여 pop()
요소를 사용할 수 있습니다. pop(0)
메서드는 목록에서 요소를 제거하여 제거한 요소를 반환합니다. 따라서 루프를 돌 때마다 항상 목록의 첫 번째 요소를 얻습니다.
그건 그렇고, 우리는 목록의 앞쪽에서 "터지기"때문에 (그것은 0입니다.) 비효율적입니다 (끝에서 튀어 나오는 것이 더 효율적입니다). 그러나 목록은 작아서 큰 문제는 아닙니다.
2 편집 :
개선 된 버전, 추가 테스트를 포함 :()는`을 돌려 쓰기 '때문에
가
import sys
def shell_print(txt, *args):
shell = sys.stdout.shell
out = txt.split("%s")
argc = len(args)
for i, t in enumerate(out):
shell.write(t)
if i < argc:
sargs = (str(args[i][0]), args[i][1])
shell.write(*sargs)
my_name = ("Bob", "STRING")
friends_name = ("Jeff", "KEYWORD")
question = "My name is %s in green and my friend's name is %s in red\n"
shell_print(question, my_name, friends_name)
# Test all tags
valid_tags = {"COMMENT","KEYWORD","BUILTIN","STRING","DEFINITION","SYNC",
"TODO","ERROR"}
for tag in valid_tags:
shell_print("\n", (tag, tag))
# Other types
my_num = (1234, "STRING")
my_float = (3.142, "COMMENT")
text = "\nMy number: %s, My float: %s\n"
shell_print(text, my_num, my_float)
'my_name = shell.write ("밥", "STRING")는'3을 제공합니다 쓴 문자 수 ("Bob"은 3 자) – cdarke
Oh ok 그렇다면'my_name = shell.write ("Bobby", "STRING")를 사용하면 5가 반환 될 것입니다. @cdarke –
또한 이렇게 정의하면 바비가 녹색으로 인쇄됩니다. 나는 아무 것도 인쇄 해달라고 요청하지 않았다. –