我正在尝试编写一个带有字符串txt
的函数,并返回该字符串的字符的ascii数字的int。它还需要第二个参数n
,它是一个指定每个字符应转换为的位数的int。 n的默认值是3.n始终是> 3,字符串输入始终为非空。
示例输出:
string_to_number('fff')
102102102
string_to_number('ABBA', n = 4)
65006600660065
我目前的策略是通过将txt
转换为列表来将ord
拆分为其字符。然后,我将字符转换为['102', '102', '102']
值,并将其附加到新列表中。然后我尝试将这个新列表中的元素组合成一个数字(例如,我将从['102102102']
转到def string_to_number(txt, n=3):
characters = list(txt)
ord_values = []
for character in characters:
ord_values.append(ord(character))
joined_ord_values = ''.join(ord_values)
final_number = int(joined_ord_values[0])
return final_number
。然后我尝试转换此列表的第一个元素(也就是唯一的元素),到整数。我当前的代码如下:
Type Error
问题是我得到if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$user_count_id="u".$user_count;
$user_count++;
$user_list[$user_count_id]=$row;
}
}
。我可以编写成功返回单字符字符串整数的代码,但是当涉及包含多个字符的字符串时,由于此类型错误,我无法解决。有没有办法解决这个问题。谢谢,如果这很长,请道歉。
答案 0 :(得分:1)
试试这个:
def string_to_number(text, n=3):
return int(''.join('{:0>{}}'.format(ord(c), n) for c in text))
print(string_to_number('fff'))
print(string_to_number('ABBA', n=4))
输出:
102102102
65006600660065
编辑,没有列表理解,正如OP在评论中提到的那样
def string_to_number(text, n=3):
l = []
for c in text:
l.append('{:0>{}}'.format(ord(c), n))
return int(''.join(l))
有用的链接:
答案 1 :(得分:0)
join
方法需要一个字符串数组,因此您需要将ASCII代码转换为字符串。这几乎完成了它:
ord_values.append(str(ord(character)))
除了它不符合您的位数要求。