我想移植此python代码
#!/usr/bin/python
# -*- coding: utf-8 -*-
def testing(x, y):
for i in range(y):
x = 2.0 * x
if x > 3.5:
return i
return 999
for i in range(20):
print testing(float(i) / 10, 15)
及其输出
999
5
4
3
3
2
2
2
etc.
生锈代码。这是我编写的rust代码,与上面的python代码相同。
fn testing(x: f32, y: i32) -> i32 {
for i in 0..y {
let x = 2.0 * x;
if x > 3.5 {
return i;
}
}
return 999;
}
fn main() {
for i in 0..20 {
let a = i as f32;
println!("{}", testing(a / 10.0, 15));
}
}
但是其输出与python代码输出不同
999
999
999
999
999
999
999
etc.
使用rust在for循环中返回值的正确方法是什么?为什么与python相比,我的rust代码输出的输出不同?
问题是线
let x = 2.0 * x;
let
引入了一个新变量,原始的x
未被修改。然后,下一个循环迭代将再次使用参数x
乘以2.0,而不是上一个循环迭代的变量x
。
您需要将值分配给现有的x
变量(需要将其标记为mut
able):
fn testing(mut x: f32, y: i32) -> i32 {
for i in 0..y {
x = 2.0 * x;
if x > 3.5 {
return i;
}
}
return 999;
}
fn main() {
for i in 0..20 {
let a = i as f32;
println!("{}", testing(a / 10.0, 15));
}
}