Pythonwerkt een beetje anders dan JavaScript, bijvoorbeeld, de waarde die u samenvoegt, moet van hetzelfde type zijn, zowel intals str. ..
Dus bijvoorbeeld de onderstaande code geeft een fout:
print( "Alireza" + 1980)
zoals dit:
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
print( "Alireza" + 1980)
TypeError: can only concatenate str (not "int") to str
Om het probleem op te lossen, voegt u str toe aan uw getal of waarde, zoals:
print( "Alireza" + str(1980))
En het resultaat als:
Alireza1980
Antwoord 1, autoriteit 100%
in plaats van de operator ” + ” te gebruiken
print( "Alireza" + 1980)
Gebruik komma ” , ” operator
print( "Alireza" , 1980)
Antwoord 2, autoriteit 50%
Gebruik f-strings om de TypeError
op te lossen
- f-Strings: een nieuwe en verbeterde manier om strings in Python te formatteren
- PEP 498 – letterlijke tekenreeksinterpolatie
# the following line causes a TypeError
# test = 'Here is a test that can be run' + 15 + 'times'
# same intent with a f-string
i = 15
test = f'Here is a test that can be run {i} times'
print(test)
# output
'Here is a test that can be run 15 times'
i = 15
# t = 'test' + i # will cause a TypeError
# should be
t = f'test{i}'
print(t)
# output
'test15'
- Het probleem is mogelijk een poging om een uitdrukking te evalueren waarbij een variabele de tekenreeks van een numeriek getal is.
- Converteer de tekenreeks naar een
int
. - Dit scenario is specifiek voor deze vraag
- Bij iteratie is het belangrijk om op de hoogte te zijn van het
dtype
i = '15'
# t = 15 + i # will cause a TypeError
# convert the string to int
t = 15 + int(i)
print(t)
# output
30
Opmerking
- Het voorgaande deel van het antwoord gaat in op de
TypeError
die wordt weergegeven in de titel van de vraag, en daarom lijken mensen naar deze vraag te komen. - Dit lost echter niet het probleem op met betrekking tot het voorbeeld van het OP, dat hieronder wordt behandeld.
Problemen met originele code
TypeError
wordt veroorzaakt omdat het typemessage
eenstr
is.- De code herhaalt elk teken en probeert
char
, eenstr
-type, toe te voegen aan eenint
- Dat probleem kan worden opgelost door
char
te converteren naar eenint
- Terwijl de code wordt gepresenteerd, moet
secret_string
worden geïnitialiseerd met0
in plaats van""
. - De code resulteert ook in een
ValueError: chr() arg not in range(0x110000)
omdat7429146
buiten bereik is voorchr()
. - Opgelost door een kleiner getal te gebruiken
- De uitvoer is geen string, zoals de bedoeling was, die leidt naar de geüpdatete code in de vraag.
message = input("Enter a message you want to be revealed: ")
secret_string = 0
for char in message:
char = int(char)
value = char + 742146
secret_string += ord(chr(value))
print(f'\nRevealed: {secret_string}')
# Output
Enter a message you want to be revealed: 999
Revealed: 2226465
Problemen met geüpdatete code
message
is nu eenint
type, dusfor char in message:
veroorzaaktTypeError: 'int' object is not iterable
message
wordt geconverteerd naarint
om ervoor te zorgen dat deinput
eenint
is.- Stel het type in met
str()
- Zet
value
alleen om naar Unicode metchr
- Gebruik
ord
niet
while True:
try:
message = str(int(input("Enter a message you want to be decrypt: ")))
break
except ValueError:
print("Error, it must be an integer")
secret_string = ""
for char in message:
value = int(char) + 10000
secret_string += chr(value)
print("Decrypted", secret_string)
# output
Enter a message you want to be decrypt: 999
Decrypted ✙✙✙
Enter a message you want to be decrypt: 100
Decrypted ✑✐✐
Antwoord 3, Autoriteit 14%
Wijzig secret_string += str(chr(char + 7429146))
Naar secret_string += chr(ord(char) + 7429146)
ord()
Converteert het karakter naar zijn Unicode-integer-equivalent. chr()
Converteert vervolgens dit gehele getal in zijn Unicode-karakter-equivalent.
Ook, 7429146 is te groot van een getal, het moet minder zijn dan 1114111
Antwoord 4, Autoriteit 14%
Gebruik dit:
print("Program for calculating sum")
numbers=[1, 2, 3, 4, 5, 6, 7, 8]
sum=0
for number in numbers:
sum += number
print("Total Sum is: %d" %sum )
Antwoord 5, Autoriteit 7%
Probleem is dat u het volgende doet
str(chr(char + 7429146))
waar Char een touwtje is. Je kunt geen int toevoegen met een touwtje. Dit veroorzaakt die fout
Misschien als u de ASCII-code wilt krijgen en deze toevoegen met een constant nummer. Zo ja, kunt u gewoon ord (char) doen en toevoegen aan een nummer. Maar nogmaals, ChR kan waarden tussen 0 en 1114112