프로그램은 두 가지 이름을 취해야하며 길이가 같으면 같은 단어인지 확인해야합니다. 같은 단어이면 “이름이 같습니다”라고 인쇄됩니다 . 길이가 같지만 글자 가 다른 경우 “이름이 다르지만 길이는 같습니다”라고 인쇄됩니다 . 내가 문제가있는 부분은 맨 아래 4 줄에 있습니다.
#!/usr/bin/env python
# Enter your code for "What's In (The Length Of) A Name?" here.
name1 = input("Enter name 1: ")
name2 = input("Enter name 2: ")
len(name1)
len(name2)
if len(name1) == len(name2):
if name1 == name2:
print ("The names are the same")
else:
print ("The names are different, but are the same length")
if len(name1) > len(name2):
print ("'{0}' is longer than '{1}'"% name1, name2)
elif len(name1) < len(name2):
print ("'{0}'is longer than '{1}'"% name2, name1)
이 코드를 실행하면 다음이 표시됩니다.
Traceback (most recent call last):
File "program.py", line 13, in <module>
print ("'{0}' is longer than '{1}'"% name1, name2)
TypeError: not all arguments converted during string formatting
모든 제안은 높이 평가됩니다.
답변
다른 형식 기능을 혼합하고 있습니다.
구식 %
형식은 다음 과 같은 형식의 %
코드를 사용합니다 .
'It will cost $%d dollars.' % 95
새로운 스타일의 {}
서식은 {}
코드와 .format
방법을 사용합니다.
'It will cost ${0} dollars.'.format(95)
구식 형식에서는 튜플을 사용하여 여러 인수를 지정해야합니다.
'%d days and %d nights' % (40, 40)
귀하의 경우 {}
형식 지정자를 사용하고 있으므로 .format
다음을 사용하십시오 .
"'{0}' is longer than '{1}'".format(name1, name2)
답변
문자열 형식에 오류가 있습니다.
‘%’연산자를 사용하여 기존 문자열 형식을 사용하는 올바른 방법은 printf 스타일 형식 문자열을 사용하는 것입니다 (Python 설명서 : http://docs.python.org/2/library/string.html#format- 문자열 구문 ) :
"'%s' is longer than '%s'" % (name1, name2)
그러나 ‘%’연산자 는 앞으로 더 이상 사용되지 않을 것입니다 . 새로운 PEP 3101 방식은 다음과 같습니다.
"'{0}' is longer than '{1}'".format(name1, name2)
답변
나를 위해,이 오류는 문자열 형식 방법으로 튜플을 전달하려고 할 때 발생했습니다.
링크에서 정답을 복사하여 붙여 넣기 (내 작품이 아님) :
>>> thetuple = (1, 2, 3)
>>> print "this is a tuple: %s" % (thetuple,)
this is a tuple: (1, 2, 3)
관심있는 튜플을 유일한 항목, 즉 (튜플) 부분으로 사용하여 싱글 톤 튜플을 만드는 것이 여기서 핵심입니다.
답변
제 경우에는 단일 %s
입력 값이 필요 없기 때문 입니다.
답변
다른 두 가지 대답 외에도 마지막 두 가지 조건에서 들여 쓰기가 잘못되었다고 생각합니다. 조건은 하나의 이름이 다른 이름보다 길며 ‘elif’로 시작하고 들여 쓰기없이 시작해야합니다. 첫 번째 조건 내에 넣으면 (여백에서 4 개의 들여 쓰기를함으로써) 이름의 길이가 동시에 같고 다를 수 없기 때문에 모순이됩니다.
else:
print ("The names are different, but are the same length")
elif len(name1) > len(name2):
print ("{0} is longer than {1}".format(name1, name2))
답변
다른 답변 중 일부에서 지적한 것처럼 문제의 조합이 있습니다.
- nneonneo가 지적한 것처럼 다른 문자열 형식화 방법을 혼합하고 있습니다.
- GuyP가 지적했듯이 들여 쓰기도 꺼져 있습니다.
.format 예제와 튜플을 % s의 인수 지정자에 전달했습니다. 두 경우 모두 들여 쓰기가 길이가 일치 할 때 수표가 너무 크거나 작게 수정되었습니다. 또한 후속 if 문을 elif로 변경하여 이전의 동일한 수준 명령문이 False 인 경우에만 실행됩니다.
.format으로 문자열 형식화
name1 = input("Enter name 1: ")
name2 = input("Enter name 2: ")
len(name1)
len(name2)
if len(name1) == len(name2):
if name1 == name2:
print ("The names are the same")
else:
print ("The names are different, but are the same length")
elif len(name1) > len(name2):
print ("{0} is longer than {1}".format(name1, name2))
elif len(name1) < len(name2):
print ("{0} is longer than {1}".format(name2, name1))
% s 및 튜플을 사용한 문자열 형식화
name1 = input("Enter name 1: ")
name2 = input("Enter name 2: ")
len(name1)
len(name2)
if len(name1) == len(name2):
if name1 == name2:
print ("The names are the same")
else:
print ("The names are different, but are the same length")
elif len(name1) > len(name2):
print ("%s is longer than %s" % (name1, name2))
elif len(name1) < len(name2):
print ("%s is longer than %s" % (name2, name1))
답변
파이썬 3.7 이상에서는 새롭고 쉬운 방법이 있습니다. 구문은 다음과 같습니다.
name = "Eric"
age = 74
f"Hello, {name}. You are {age}."
산출:
Hello, Eric. You are 74.
