python遍历字符串并对每一个字符进行位运算
时间: 2024-03-27 10:39:28 浏览: 18
可以使用 for 循环遍历字符串中的每一个字符,并使用位运算符对其进行位运算。例如,下面的代码将字符串中的每一个字符与二进制数 00001111 进行按位与运算:
```python
s = "hello world"
for c in s:
result = ord(c) & 0b00001111
print(result)
```
其中,`ord(c)` 可以将字符 `c` 转换为对应的 ASCII 码值。`&` 是按位与运算符。`0b` 表示二进制数的前缀。上述代码的输出结果为:
```
8
5
12
12
15
0
23
12
15
18
12
3
```
每个输出结果表示字符与 00001111 二进制数进行按位与运算的结果。
相关问题
python输入一个表达式字符串计算结果不使用eval
可以使用栈来实现表达式的计算,具体步骤如下:
1. 定义一个栈,用来存储数字和运算符。
2. 遍历表达式字符串,如果遇到数字,就将其压入栈中;如果遇到运算符,就将栈顶的两个数字弹出,进行运算,并将结果压入栈中。
3. 最后栈中只剩下一个数字,就是表达式的计算结果。
下面是一个示例代码:
```python
def calculate(expression):
stack = []
i =
while i < len(expression):
if expression[i].isdigit():
j = i
while j < len(expression) and expression[j].isdigit():
j += 1
num = int(expression[i:j])
stack.append(num)
i = j
elif expression[i] in "+-*/":
op = expression[i]
if len(stack) < 2:
raise ValueError("Invalid expression")
b = stack.pop()
a = stack.pop()
if op == "+":
result = a + b
elif op == "-":
result = a - b
elif op == "*":
result = a * b
elif op == "/":
result = a / b
stack.append(result)
i += 1
else:
raise ValueError("Invalid expression")
if len(stack) != 1:
raise ValueError("Invalid expression")
return stack[]
```
这个函数接受一个表达式字符串作为参数,返回计算结果。如果表达式不合法,会抛出 ValueError 异常。
python计算字符串数字的加减乘除带括号运算法不适用eval函数
可以使用栈来实现计算字符串数字的加减乘除带括号运算,不需要使用eval函数。具体实现步骤如下:
1. 定义一个栈,用来存储数字和运算符。
2. 遍历字符串,遇到数字则入栈,遇到运算符则判断栈顶元素是否为数字,如果是则将运算符入栈,否则弹出两个数字和一个运算符进行运算,将结果入栈。
3. 遇到左括号则直接入栈,遇到右括号则弹出栈顶元素直到遇到左括号为止,将弹出的元素进行运算,将结果入栈。
4. 遍历完成后,将栈中剩余的元素进行运算,得到最终结果。
示例代码如下:
```python
def calculate(s):
stack = []
num = 0
sign = "+"
for i in range(len(s)):
if s[i].isdigit():
num = num * 10 + int(s[i])
if s[i] in "+-*/" or i == len(s) - 1:
if sign == "+":
stack.append(num)
elif sign == "-":
stack.append(-num)
elif sign == "*":
stack.append(stack.pop() * num)
elif sign == "/":
stack.append(int(stack.pop() / num))
num = 0
sign = s[i]
if s[i] == "(":
stack.append(sign)
sign = "+"
if s[i] == ")":
if sign == "+":
stack.append(num)
elif sign == "-":
stack.append(-num)
num = 0
while isinstance(stack[-1], int):
num += stack.pop()
if stack[-1] == "+":
stack.pop()
stack.append(num)
elif stack[-1] == "-":
stack.pop()
stack.append(-num)
break
return sum(stack)
```
测试代码:
```python
s = "(1+(2+3)*4)-5"
print(calculate(s)) # 输出:16
s = "2*(1+3)"
print(calculate(s)) # 输出:8
```
注意:此方法只适用于字符串中只包含数字、加减乘除和括号的情况,如果有其他字符或者不合法的运算式,程序会报错或者得到错误的结果。