Program powinien przyjmować dwie nazwy, a jeśli mają taką samą długość, powinien sprawdzić, czy są to to samo słowo. Jeśli jest to to samo słowo, zostanie wydrukowane „Nazwy są takie same” . Jeśli mają taką samą długość, ale mają różne litery, zostanie wydrukowany „Nazwy są różne, ale mają tę samą długość” . Część, z którą mam problem, to dolne 4 wiersze.
#!/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)
Po uruchomieniu tego kodu wyświetla się:
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
Wszelkie sugestie są bardzo mile widziane.
źródło
f"'It will cost ${your_variable} dollars."
Błąd dotyczy formatowania łańcucha.
Prawidłowym sposobem korzystania z tradycyjnego formatowania ciągów za pomocą operatora „%” jest użycie ciągu formatu formatu printf (dokumentacja Pythona w tym celu: http://docs.python.org/2/library/string.html#format- składnia łańcuchowa ):
Jednak operator „%” prawdopodobnie będzie przestarzały w przyszłości . Nowy sposób robienia rzeczy w PEP 3101 wygląda następująco:
źródło
{}
w wersji 3.2 nauczył się, jak formatować w nowym stylu . I nagle 3.5 wprowadza PEP 461:%
formatowanie bajtów . To sprawia, że myślę o%
szczątkach jeszcze długo.%
jest bardziej zwięzły. Cieszę się, że zostaje z nami."'%s' is longer than '%s'" % (name1, name2)
bardziej zwięzłe niżf"'{name1}' is longer than '{name2}'"
Dla mnie ten błąd został spowodowany, gdy próbowałem przekazać krotkę do metody formatu ciągu.
Znalazłem rozwiązanie z tego pytania / odpowiedzi
Kopiowanie i wklejanie poprawnej odpowiedzi z linku (NIE MOJA PRACA) :
źródło
print("this is a tuple: %s" % str(thetuple))
lubprint("this is a tuple: %s" % repr(thetuple))
W moim przypadku to dlatego, że potrzebuję tylko jednego
%s
, brakuje wartości wejściowych.źródło
Oprócz dwóch pozostałych odpowiedzi, myślę, że wcięcia są również niepoprawne w dwóch ostatnich warunkach. Warunki są takie, że jedno imię jest dłuższe od drugiego i muszą zaczynać się od „elif” i bez wcięć. Jeśli umieścisz go w pierwszym warunku (podając cztery wcięcia od marginesu), skończy się to sprzecznością, ponieważ długości nazw nie mogą być równe i różne w tym samym czasie.
źródło
Istnieje kilka problemów wskazanych w kilku innych odpowiedziach.
Podałem zarówno przykład .format, jak i przekazywanie krotek do specyfikatora argumentu% s. W obu przypadkach wcięcie zostało naprawione, więc większe / mniejsze niż kontrole są poza momentem dopasowania długości. Zmieniono również kolejne instrukcje if na elif, więc działają tylko wtedy, gdy poprzednia instrukcja tego samego poziomu była fałszywa.
Formatowanie ciągów za pomocą .format
Formatowanie ciągów za pomocą% si krotki
źródło
W Pythonie 3.7 i nowszych istnieje nowy i łatwy sposób. oto składnia:
Wynik:
źródło
Dla mnie, ponieważ przechowywałem wiele wartości w jednym wywołaniu drukowania, rozwiązaniem było utworzenie osobnej zmiennej do przechowywania danych jako krotki, a następnie wywołanie funkcji drukowania.
źródło
Wystąpił również błąd,
Ale lista argumentów działa dobrze.
Używam mysqlclient python lib. Wygląda na to, że lib nie akceptuje krotek argumentów. Aby przekazać listę, argumenty jak
['arg1', 'arg2']
będą działać.źródło
zapytanie django raw sql w widoku
źródło