Python 如何解决TypeError:只能将str(而不是“int”连接到str 我决定用Unicode做一些测试用的密码 我通过在Unicode中添加数字来做到这一点,所以这将是一种秘密 我一直在犯这个错误,但我不知道如何解决它。 有什么解决办法吗 原始代码 message=input(“输入要显示的消息:”) secret_string=“” 对于消息中的字符: secret_string+=str(chr(char+7429146)) 打印(“显示”,秘密字符串) q=输入(“”) 原始误差
问题是您正在执行以下操作Python 如何解决TypeError:只能将str(而不是“int”连接到str 我决定用Unicode做一些测试用的密码 我通过在Unicode中添加数字来做到这一点,所以这将是一种秘密 我一直在犯这个错误,但我不知道如何解决它。 有什么解决办法吗 原始代码 message=input(“输入要显示的消息:”) secret_string=“” 对于消息中的字符: secret_string+=str(chr(char+7429146)) 打印(“显示”,秘密字符串) q=输入(“”) 原始误差,python,unicode,Python,Unicode,问题是您正在执行以下操作 str(chr(char + 7429146)) 其中char是一个字符串。不能用字符串添加int。这将导致该错误 如果您想获取ascii码并将其与一个常量相加,则可能需要。如果是这样,您只需执行ord(char)并将其添加到一个数字中即可。但是,chr可以取0到1114112之间的值Changesecret\u string+=str(chr(char+7429146)) Tosecret\u string+=chr(ord(char)+7429146) ord()
str(chr(char + 7429146))
其中char是一个字符串。不能用字符串添加int。这将导致该错误
如果您想获取ascii码并将其与一个常量相加,则可能需要。如果是这样,您只需执行ord(char)并将其添加到一个数字中即可。但是,chr可以取0到1114112之间的值Change
secret\u string+=str(chr(char+7429146))
Tosecret\u string+=chr(ord(char)+7429146)
ord()
将字符转换为等效的Unicode整数chr()
然后将该整数转换为其等效的Unicode字符
另外,7429146是一个太大的数字,它应该小于1114111。Python的工作方式与JavaScript有点不同。例如,您连接的值需要是相同的类型,包括int或str 例如,下面的代码抛出一个错误:
print( "Alireza" + 1980)
像这样:
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
print( "Alireza" + 1980)
TypeError: can only concatenate str (not "int") to str
结果如下:
Alireza1980
而不是使用“+”运算符
print(“Alireza”+1980)
使用逗号“,”运算符
print(“Alireza”,1980年)
使用以下方法:
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 )
使用f字符串解决类型错误
#下一行导致类型错误
#test='这是一个可以运行'+15+'次的测试'
#与f字符串具有相同的意图
i=15
test=f'这是一个可以运行{i}次的测试'
打印(测试)
#输出
“这是一个可以运行15次的测试”
- 问题可能是试图对变量为数值字符串的表达式求值
- 将字符串转换为
int
- 此场景特定于此问题
- 迭代时,注意
dtype
i='15'
#t=15+i将导致类型错误
#将字符串转换为int
t=15+int(i)
打印(t)
#输出
30
注
- 答案的前一部分解决了问题标题中显示的
,这就是为什么人们似乎要问这个问题TypeError
- 但是,这并不能解决与OP提供的示例相关的问题,下面将讨论该示例
是由于类型错误
类型是消息
引起的str
- 代码迭代每个字符,并尝试将
(一种char
类型)添加到str
int
- 通过将
转换为char
int
- 在显示代码时,
需要用secret\u字符串
而不是0
初始化“
- 代码还会导致
,因为ValueError:chr()arg不在范围内(0x110000)
超出了7429146
chr()的范围
- 通过使用较小的数字来解决
- 输出不是预期的字符串,这导致问题中的更新代码
message=input(“输入要显示的消息:”)
机密字符串=0
对于消息中的字符:
char=int(char)
值=字符+742146
机密字符串+=ord(chr(值))
打印(f'\n公开:{secret\u string}')
#输出
输入要显示的消息:999
公开电话:2226465
更新的代码问题
现在是message
类型,因此int
会导致对于message中的char:
TypeError:“int”对象不可编辑
转换为消息
,以确保int
为输入
int
- 使用
str()
- 仅将
转换为Unicode值
- 不要使用
为True时:
尝试:
message=str(int(输入(“输入要解密的消息:”))
打破
除值错误外:
打印(“错误,必须是整数”)
secret_string=“”
对于消息中的字符:
值=整数(字符)+10000
secret_string+=chr(值)
打印(“解密”,机密字符串)
#输出
输入要解密的消息:999
解密✙✙✙
输入要解密的消息:100
解密✑✐✐
char+7429146是什么意思?将char+7429146
更改为char+str(7429146)
。你不能连接字符串和INT,因为行secret\u string+=str(chr(char+7429146))
你必须强制转换该整数才能连接到char变量:secret\u string+=str(chr(char+str(7429146))
@InAFlash我的答案不同,因为我删除了str()
从外部添加一个ord()
内部print(“Alireza”,1980)
输出Alireza 1980
,中间有一个额外的空格。为了避免额外的空格,可以覆盖sep
参数的默认值:print(“Alireza,1980,sep=”)
这只适用于打印
,因为打印时需要无限数量的参数。在尝试将字符串与整数串联的一般情况下,它不起作用。
Alireza1980
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 )
i = 15
# t = 'test' + i # will cause a TypeError
# should be
t = f'test{i}'
print(t)
# output
'test15'