本文目录一览:
- 1、python中有 stun包吗
- 2、如何用Python编写一个素数环
- 3、python 最简单的方法写一个程序。
- 4、英语python supports objects怎么翻译?
- 5、你都用Python 来做什么?
- 6、谁来帮帮我
python中有 stun包吗
有
stun协议主要用来UDP穿越NAT用的,也就是我们经常听到的UDP打洞。协议的细节内容大家可以参考rfc3489。
如何用Python编写一个素数环
此文主要目的,是向大家展示如何才能用python语言,来部署STARK算法。
STARKs(可扩容的透明知识论证)是创建一种证明的技术,这项证明中f(x)=y,其中f可能要花很长的时间来进行计算,但是这个证明可以被很快验证。STARK是“双重扩容”:对于一个需要t步骤的计算,这会花费大约O(t * log(t))步骤才能完成这个证明,这可能是最优的情况,而且这需要通过~O(log2(t))个步骤才能验证,对于中等大小的T值,它比原始计算快得多。STARKs也拥有隐私保护的“零知识证明”的特性,虽然我们将这类使用案例应用到其中,从而完成可验证的延迟功能,不需要这类性质,所以我们不用担心。
首先,先请几项说明:
这个代码还没有完全审核;在实际使用案例中的情况,还不能保证
这部分代码是还没有达到理想状态(是用Python语言写的)
STARKs 的“真实情况” 倾向于使用二进制字段而不是素数域的特定应用程序效率的原因;但是,他们确实也表现出,这里写出的代码是合法并且可用的。
没有一个真实的方法来使用STARK。它是一个非常宽泛的加密和数学架构,同时为不同的应用有不同的设置,以及连续的研究来减少证明者和验证者的复杂性,同时提高可用性。
此文希望大家能够知道,模运算和素数域是如何运行的,
并且和多项式概念,插值和估值进行结合。
现在,让我们一起来了解吧!
MIMC
下面是STARK的功能展示:
def mimc(inp, steps, round_constants): start_time = time.time() for i in range(steps-1): inp = (inp**3 + round_constants[i % len(round_constants)]) % modulus print("MIMC computed in %.4f sec" % (time.time() - start_time)) return inp
我们选择MIMC作为案例,因为它(i)很容易理解,(ii)在真实世界使用的很多。函数功能见下图:
注意:在很多关于MIMC的讨论中,你可以典型地看出使用了XOR,而不是+;这是因为MIMC可以在二进制情况下使用,其中添加是XOR;这里我们会在素数领域进行。
在我们的案例中,常数相对而言会是比较小的列表(例如,64位),这会一直连续地进行周期循环(也就说,在k[64]之后)。MIMC自身可以获得这个特性,因为MIMC可以向后进行计算(从相应的输出获得输入),但是往后计算需要比向前计算多花费100倍的时间(并且没有方向可以同步进行)。所以你可以将往后计算的功能想象成计算不能同步的工作量证明,并且往前方向计算的功能可以作为验证的过程。
x - x(2p-1)/3 是x - x3 的反函数;根据费马小定理,这是真实的,尽管这个定理没有费马大定理出名,但是依然对数学的贡献很大。
我们尝试使用STARK来进行更加有效的验证,而不是让验证者必须在向前方向运行MIMC,在完成向后计算之后,证明者可以在向前方向进行STARK计算,并且验证者可以很简单地验证STARK。我们希望计算STARK可以比MIMC向前和向后之间的运行速度差别要小,所以证明者的时间仍然是有初始的向后计算来主导的。而并不是STARK计算。STARK的认证会相对较快(在python语言算法中,可以是0.05-0.3秒),不论初始的计算时间有多长。
所有的计算会在2256 – 351 * 232 + 1个模内完成;我们使用素数模,因为它是小于2256 最大的素数,其中乘法群包含了232 个子集(也就是说,有这样一个数g,从而在完全232次循环之后,G素数环的连续幂模绕回到1),而且是按照6k+5的形式。首个特性是保证FFT和FRI算法的有效版本,其次是保证MIMC实际上可以向后计算(请见上面提到的x - x(2p-1)/3 使用方法)。
素域操作
我们通过建立方便的等级来进行素域的操作,同时也有多项式的操作。代码如下,收首先是小数位数:
class PrimeField(): def __init__(self, modulus): # Quick primality test assert pow(2, modulus, modulus) == 2 self.modulus = modulus def add(self, x, y): return (x+y) % self.modulus def sub(self, x, y): return (x-y) % self.modulus def mul(self, x, y): return (x*y) % self.modulus
并且使用扩展欧几里得算法,来计算模块逆转(这和在素域中计算1/x相同):
# Modular inverse using the extended Euclidean algorithm def inv(self, a): if a == 0: return 0 lm, hm = 1, 0 low, high = a % self.modulus, self.modulus while low 1: r = high//low nm, new = hm-lm*r, high-low*r lm, low, hm, high = nm, new, lm, low return lm % self.modulus
上面的算法是相对昂贵的;幸运地是,对于特定的案例,我们需要做很多的模逆计算,有一个数学方法可以让我们来计算很多逆运算,被称为蒙哥马利批量求逆:
使用蒙哥马利批量求逆来计算模逆,其输入为紫色,输出为绿色,乘法门为黑色,红色方块是唯一的模逆。
下面的代码是算法的体现,其中包含一些特别的逻辑。如果我们正在求逆的集合中包含零,那么它会将这些零的逆设置为 0 并继续前进。
def multi_inv(self, values): partials = [1] for i in range(len(values)): partials.append(self.mul(partials[-1], values[i] or 1)) inv = self.inv(partials[-1]) outputs = [0] * len(values) for i in range(len(values), 0, -1): outputs[i-1] = self.mul(partials[i-1], inv) if values[i-1] else 0 inv = self.mul(inv, values[i-1] or 1) return outputs
这部分算法接下来会验证称为非常重要的东西,特别是当我们开始和不同阶的多项式进行计算的时候。
现在我们来看看一些多项式计算。我们把多项式当做一个数据集,其中的i是第i阶(例如,x3 + 2x + 1变成[1, 2, 0, 1])。下面就是在一个点进行多项式估算的方法:
# Evaluate a polynomial at a point def eval_poly_at(self, p, x): y = 0 power_of_x = 1 for i, p_coeff in enumerate(p): y += power_of_x * p_coeff power_of_x = (power_of_x * x) % self.modulus return y % self.modulus
困难和挑战
f.eval_poly_at([4, 5, 6], 2)的输出是多少?模是31吗?
下面的解释就是答案
.其实也有代码是多项式加法,减法,乘法和除法;这是很长的加减乘除运算。有一个很重要的内容是拉格朗日插值,它将一组 x 和 y 坐标作为输入,并返回通过所有这些点的最小多项式(你可以将其视为多项式求值的逆):
# Build a polynomial that returns 0 at all specified xs def zpoly(self, xs): root = [1] for x in xs: root.insert(0, 0) for j in range(len(root)-1): root[j] -= root[j+1] * x return [x % self.modulus for x in root] def lagrange_interp(self, xs, ys): # Generate master numerator polynomial, eg. (x - x1) * (x - x2) * ... * (x - xn) root = self.zpoly(xs) # Generate per-value numerator polynomials, eg. for x=x2, # (x - x1) * (x - x3) * ... * (x - xn), by dividing the master # polynomial back by each x coordinate nums = [self.div_polys(root, [-x, 1]) for x in xs] # Generate denominators by evaluating numerator polys at each x denoms = [self.eval_poly_at(nums[i], xs[i]) for i in range(len(xs))] invdenoms = self.multi_inv(denoms) # Generate output polynomial, which is the sum of the per-value numerator # polynomials rescaled to have the right y values b = [0 for y in ys] for i in range(len(xs)): yslice = self.mul(ys[i], invdenoms[i]) for j in range(len(ys)): if nums[i][j] and ys[i]: b[j] += nums[i][j] * yslice return [x % self.modulus for x in b]
相关数学知识请参见此文的M-N部分。需要注意,我们也会有特别的方法lagrange_interp_4和lagrange_interp_2来加速次数小于 2 的拉格朗日插值和次数小于 4 的多项式运算。
快速傅立叶变换
如果你仔细阅读上面的算法,你也许会发现拉格朗日插值和多点求值(即求在N个点处次数小于N的多项式的值)都需要耗费2次时间,例如对于1000个点求拉格朗日插值,需要几百万个步骤,而且100万个点的拉格朗日插值需要万亿个步骤。这是不可接受的低效率,所以我们需要使用更加有效的算法,快速傅立叶变换。
FFT只需要花费O(n * log(n))的时间(也就是说,1000个点的计算需要10,000步,100万个点的计算需要2000步),虽然它的范围更受限制;x坐标必须是单位根部的完全集合,必须满足N = 2k 阶。也就是说,如果有N个点,那么x坐标必须某个P值的连续幂,1, p, p2, p3…,其中pN = 1。这个算法能够用来进行多点计算和插值计算,而且只需要调整一个小参数。
下面就是算法详情(这是个简单的表达方式;更详细内容可以参阅此处代码)
def fft(vals, modulus, root_of_unity): if len(vals) == 1: return vals L = fft(vals[::2], modulus, pow(root_of_unity, 2, modulus)) R = fft(vals[1::2], modulus, pow(root_of_unity, 2, modulus)) o = [0 for i in vals] for i, (x, y) in enumerate(zip(L, R)): y_times_root = y*pow(root_of_unity, i, modulus) o[i] = (x+y_times_root) % modulus o[i+len(L)] = (x-y_times_root) % modulus return o def inv_fft(vals, modulus, root_of_unity): f = PrimeField(modulus) # Inverse FFT invlen = f.inv(len(vals)) return [(x*invlen) % modulus for x in fft(vals, modulus, f.inv(root_of_unity))]
你可以自己通过一些输入来运行代码,并且看看是否能得到想要的结果,当你使用eval_poly_at的时候,给出你期望得到的答案。例如:
fft.fft([3,1,4,1,5,9,2,6], 337, 85, inv=True) [46, 169, 29, 149, 126, 262, 140, 93] f = poly_utils.PrimeField(337) [f.eval_poly_at([46, 169, 29, 149, 126, 262, 140, 93], f.exp(85, i)) for i in range(8)] [3, 1, 4, 1, 5, 9, 2, 6]
傅里叶变换会把[x[0] …. x[n-1]]作为输入,并且它的目标是输出x[0] + x[1] + … + x[n-1]作为首个元素,x[0] + x[1] * 2 + … + x[n-1] * w**(n-1)作为第二个元素,等等;快速傅里叶变换可以通过把数据分为两半,来完成这个,在两边都进行FFT,然后将结果结合在一起。
上图就是信息如何进行FFT运算的解释。请注意FFT是如何进行两次数据复制,并且进行粘合,直到你得到一个元素。
现在,我们把所有部分组合起来,看看整件事情是如何:def mk_mimc_proof(inp, steps, round_constants),它生成运行 MIMC 函数的执行结果的证明,其中给定的输入为步骤数。首先,是一些 assert 函数:
# Calculate the set of x coordinates xs = get_power_cycle(root_of_unity, modulus) column = [] for i in range(len(xs)//4): x_poly = f.lagrange_interp_4( [xs[i+len(xs)*j//4] for j in range(4)], [values[i+len(values)*j//4] for j in range(4)], ) column.append(f.eval_poly_at(x_poly, special_x))
扩展因子是我们将要拉伸的计算轨迹(执行 MIMC 函数的“中间值”的集合)。
m2 = merkelize(column) # Pseudo-randomly select y indices to sample # (m2[1] is the Merkle root of the column) ys = get_pseudorandom_indices(m2[1], len(column), 40) # Compute the Merkle branches for the values in the polynomial and the column branches = [] for y in ys: branches.append([mk_branch(m2, y)] + [mk_branch(m, y + (len(xs) // 4) * j) for j in range(4)])
我们需要步数乘以扩展因子最多为 2^32,因为当 k 32 时,我们没有 2^k 次的单位根。
computational_trace_polynomial = inv_fft(computational_trace, modulus, subroot) p_evaluations = fft(computational_trace_polynomial, modulus, root_of_unity)
我们首个计算会是得出计算轨迹;也就是说,所有的计算中间值,从输入到输出。
assert steps = 2**32 // extension_factor assert is_a_power_of_2(steps) and is_a_power_of_2(len(round_constants)) assert len(round_constants) steps
然后,我们会从将计算轨迹转换为多项式,在单位根 g (其中,g^steps = 1)的连续幂的轨迹上“放下”连续值,然后我们对更大的集合——即单位根 g2 的连续幂,其中 g2^steps * 8 = 1(注意 g2^8 = g)的多项式求值。
# Generate the computational trace computational_trace = [inp] for i in range(steps-1): computational_trace.append((computational_trace[-1]**3 + round_constants[i % len(round_constants)]) % modulus) output = computational_trace[-1]
黑色: g1 的幂。紫色: g2 的幂。橙色:1。你可以将连续的单位根看作一个按这种方式排列的圆圈。我们沿着 g1的幂“放置”计算轨迹,然后扩展它来计算在中间值处(即 g2 的幂)的相同多项式的值。
我们可以将MIMC的循环常数转换为多项式。因为这些循环常数链是非常通常发生地(在我们的测试中,每64个步骤都会进行),最终证明他们形成了64阶的多项式,而且外面可以很容易计算出它的表达式,以及扩展式:
skips2 = steps // len(round_constants) constants_mini_polynomial = fft(round_constants, modulus, f.exp(subroot, skips2), inv=True) constants_polynomial = [0 if i % skips2 else constants_mini_polynomial[i//skips2] for i in range(steps)] constants_mini_extension = fft(constants_mini_polynomial, modulus, f.exp(root_of_unity, skips2))
假设其中有8192个步骤,并且有64个循环常数。这是我们想要做的:我们正在进行FFT,从而计算循环常数来作为g1128 的功能。然后我们在之间加入很多零,来完成g1本身的功能。因为g1128 大约每64步进行循环,我们知道g1这个功能也会同样。我们只计算这个扩展中的512个步骤,因为我们知道这个扩展会在每512步之后重复。现在,我们按照斐波那契案例中那样,计算C(P(x)),除了这次是计算,需要注意,我们不在计算使用系数形式的多项式;而是根据高次单位根的连续幂来对多项式进行求值。
c_of_p需要满足Q(x) = C(P(x), P(g1*x),K(x)) = P(g1*x) – P(x)**3 – K(x);目标是对于任何我们放入计算轨道的x(除了最后一步,因为在最后一步之后,就没有步骤),计算轨迹中的下个数值就和之前的相等,再加上循环常量。与第1部分中的斐波那契示例不同,其中如果某个计算步骤是在k向量,下个就会是k+1向量,我们把低次单位根( g1 )的连续幂放下计算轨迹,所以如果某个计算步骤是在x = g1i ,下个步骤就会在g1i+1 = g1i * g1 = x * g1。因此,对于低阶单位根( g1 )的每一个幂,我们希望最终会是P(x*g1) = P(x)**3 + K(x),或者P(x*g1) – P(x)**3 – K(x) = Q(x) = 0。因此,Q(x) 会在低次单位根 g 的所有连续幂上等于零(除了最后一个)。
# Create the composed polynomial such that # C(P(x), P(g1*x), K(x)) = P(g1*x) - P(x)**3 - K(x) c_of_p_evaluations = [(p_evaluations[(i+extension_factor)%precision] - f.exp(p_evaluations[i], 3) - constants_mini_extension[i % len(constants_mini_extension)]) % modulus for i in range(precision)] print('Computed C(P, K) polynomial')
有个代数定理证明,如果Q(x)在所有这些x坐标,都等于零,那么最小多项式的乘积就会在所有这些x坐标等于零:Z(x) = (x – x_1) * (x – x_2) * … * (x – x_n)。通过证明在任何单个的坐标,Q(x)是等于零,我们想要证明这个很难,因为验证这样的证明比运行原始计算需要耗费更长的时间,我们会使用一个间接的方式来证明Q(x)是Z(x)的乘积。并且我们会怎么做呢?通过证明D(x) = Q(x) / Z(x),并且使用FRI来证明它其实是个多项式,而不是个分数。
我们选择低次单位根和高次单位根的特定排列,因为事实证明,计算Z(x),而且除以Z(x)也十分简单:Z 的表达式是两项的一部分。
需要注意地是,直接计算Z的分子和分母,然后使用批量模逆的方法将除以Z转换为乘法,随后通过 Z(X) 的逆来逐点乘以 Q(x) 的值。需要注意,对于低次单位根的幂,除了最后一个,都可以得到Z(x) = 0,所以这个计算包含其逆计算就会中断。这是非常不幸的,虽然我们会通过简单地修改随机检查和FRI算法来堵住这个漏洞,所以就算我们计算错误,也没关系。
因为Z(x)可以简洁地表达,我们也可以获得另个好处:验证者对于任何特别的x,可以快速计算Z(x),而且还不需要任何提前计算。对于证明者来说,我们可以接受证明者必须处理大小等于步数的多项式,但我们不想让验证者做同样的事情,因为我们希望验证过程足够简洁。
# Compute D(x) = Q(x) / Z(x) # Z(x) = (x^steps - 1) / (x - x_atlast_step) z_num_evaluations = [xs[(i * steps) % precision] - 1 for i in range(precision)] z_num_inv = f.multi_inv(z_num_evaluations) z_den_evaluations = [xs[i] - last_step_position for i in range(precision)] d_evaluations = [cp * zd * zni % modulus for cp, zd, zni in zip(c_of_p_evaluations, z_den_evaluations, z_num_inv)] print('Computed D polynomial')
在几个随机点上,进行概念检测D(x) * Z(x) = Q(x),从而可以验证转账约束,每个计算步骤是之前步骤的有效结果。但是我们也想验证边界约束,其中计算的输入和输出就是证明者所说的那样。只是要求证明者提供P(1), D(1), P(last_step)还有D(last_step)的数值,这些都是很脆弱的;没有证明,那些数值都是在同个多项式。所以,我们使用类似的多项式除法技巧:
# Compute interpolant of ((1, input), (x_atlast_step, output)) interpolant = f.lagrange_interp_2([1, last_step_position], [inp, output]) i_evaluations = [f.eval_poly_at(interpolant, x) for x in xs] zeropoly2 = f.mul_polys([-1, 1], [-last_step_position, 1]) inv_z2_evaluations = f.multi_inv([f.eval_poly_at(quotient, x) for x in xs]) # B = (P - I) / Z2 b_evaluations = [((p - i) * invq) % modulus for p, i, invq in zip(p_evaluations, i_evaluations, inv_z2_evaluations)] print('Computed B polynomial')
那么,我们的论证如下。证明者想要证明P(1) == input和P(last_step) == output。如果我们将I(x)作为插值,那么就是穿越(1, input)和(last_step, output)亮点的线,于是P(x) – I(x)就会在这亮点上等于零。因此,它会证明P(x) – I(x)是P(x) – I(x)的乘积,并且我们通过提高商数来证明这点。
紫色:计算轨迹多项式 (P) 。绿色:插值 (I)(注意插值是如何构造的,其在 x = 1 处等于输入(应该是计算轨迹的第一步),在 x=g^(steps-1) 处等于输出(应该是计算轨迹的最后一步)。红色:P-I。黄色:在x = 1和 x=g^(steps-1)(即 Z2)处等于 0 的最小多项式。粉红色:(P – I) / Z2。
现在,我们来看看将P,D和B的默克尔根部组合在一起。
现在,我们需要证明P,D和B其实都是多项式,并且是最大的正确阶数。但是FRI证明是很大且昂贵的,而且我们不想有三个FRI证明,所以,我们计算 P,D 和 B 的伪随机线性组合,并且基于它来进行FRI证明:
# Compute their Merkle roots mtree = merkelize([pval.to_bytes(32, 'big') + dval.to_bytes(32, 'big') + bval.to_bytes(32, 'big') for pval, dval, bval in zip(p_evaluations, d_evaluations, b_evaluations)]) print('Computed hash root')
除非所有这三个多项式有正确的低阶,不然几乎不可能有随机选择的线性组合,所以这很足够。
我们想要证明D的阶数小于2 * steps,而且P 和 B 的次数小于steps,所以我们其实使用了随机的P, P * xsteps, B, Bsteps 和 D的随机组合,并且可以看出这部分组合是小于2 * steps。
现在,我们来检查下所有的多项式组合。我们先获得很多随机的索引,然后在这些索引上为默克尔树枝提供多项式:
k1 = int.from_bytes(blake(mtree[1] + b'\x01'), 'big') k2 = int.from_bytes(blake(mtree[1] + b'\x02'), 'big') k3 = int.from_bytes(blake(mtree[1] + b'\x03'), 'big') k4 = int.from_bytes(blake(mtree[1] + b'\x04'), 'big') # Compute the linear combination. We don't even bother calculating it # in coefficient form; we just compute the evaluations root_of_unity_to_the_steps = f.exp(root_of_unity, steps) powers = [1] for i in range(1, precision): powers.append(powers[-1] * root_of_unity_to_the_steps % modulus) l_evaluations = [(d_evaluations[i] + p_evaluations[i] * k1 + p_evaluations[i] * k2 * powers[i] + b_evaluations[i] * k3 + b_evaluations[i] * powers[i] * k4) % modulus for i in range(precision)]
get_pseudorandom_indices函数会回复[0…precision-1]范围中的随机索引,而且exclude_multiples_of参数并不会给出特定参数倍数的值。这就保证了,我们不会沿着原始计算轨迹进行采样,否则就会获得错误的答案。
证明是由一组默克尔根、经过抽查的分支以及随机线性组合的低次证明组成:
# Do some spot checks of the Merkle tree at pseudo-random coordinates, excluding # multiples of `extension_factor` branches = [] samples = spot_check_security_factor positions = get_pseudorandom_indices(l_mtree[1], precision, samples, exclude_multiples_of=extension_factor) for pos in positions: branches.append(mk_branch(mtree, pos)) branches.append(mk_branch(mtree, (pos + skips) % precision)) branches.append(mk_branch(l_mtree, pos)) print('Computed %d spot checks' % samples)
整个证明最长的部分是默克尔树分支,还有FRI证明,这是有更多分支来组成的。这是验证者的实质结果:
o = [mtree[1], l_mtree[1], branches, prove_low_degree(l_evaluations, root_of_unity, steps * 2, modulus, exclude_multiples_of=extension_factor)]
在每个位置,证明者需要提供一个默克尔证明,从而让验证者能够检查这个默克尔证明,并且检查C(P(x), P(g1*x), K(x)) = Z(x) * D(x)以及B(x) * Z2(x) + I(x) = P(x)(提醒:对于不在初始计算轨道上的x,Z(x)不会是零,所以C(P(x), P(g1*x), K(x)也不会是零)。验证者也会检查线性组合是正确的,然后调用。
for i, pos in enumerate(positions): x = f.exp(G2, pos) x_to_the_steps = f.exp(x, steps) mbranch1 = verify_branch(m_root, pos, branches[i*3]) mbranch2 = verify_branch(m_root, (pos+skips)%precision, branches[i*3+1]) l_of_x = verify_branch(l_root, pos, branches[i*3 + 2], output_as_int=True) p_of_x = int.from_bytes(mbranch1[:32], 'big') p_of_g1x = int.from_bytes(mbranch2[:32], 'big') d_of_x = int.from_bytes(mbranch1[32:64], 'big') b_of_x = int.from_bytes(mbranch1[64:], 'big') zvalue = f.div(f.exp(x, steps) - 1, x - last_step_position) k_of_x = f.eval_poly_at(constants_mini_polynomial, f.exp(x, skips2)) # Check transition constraints Q(x) = Z(x) * D(x) assert (p_of_g1x - p_of_x ** 3 - k_of_x - zvalue * d_of_x) % modulus == 0 # Check boundary constraints B(x) * Z2(x) + I(x) = P(x) interpolant = f.lagrange_interp_2([1, last_step_position], [inp, output]) zeropoly2 = f.mul_polys([-1, 1], [-last_step_position, 1]) assert (p_of_x - b_of_x * f.eval_poly_at(zeropoly2, x) - f.eval_poly_at(interpolant, x)) % modulus == 0 # Check correctness of the linear combination assert (l_of_x - d_of_x - k1 * p_of_x - k2 * p_of_x * x_to_the_steps - k3 * b_of_x - k4 * b_of_x * x_to_the_steps) % modulus == 0
其实还没有完成成功;证明对跨多项式检查和 FRI 所需的抽查次数的可靠性分析是非常棘手的。但是这些就是所有代码,至少你不用担心进行疯狂的优化。当我运行以上代码的时候,我们会获得STARK证明,会有300-400倍的证明成本例如,一个需要 0.2 秒的 MIMC 计算需要 60 秒来证明)。这就使得4核机器计算MIMC中的 STARK,实际上可以比后向计算 MIMC 更快。也就是说,在python语言,这会相对低效的实现,并且这也会证明运行时间比例会不同。同时,也值得指出,MIMC 的 STARK 证明成本非常低,因为MIMC几乎是完美地可计算,它的数学形式很简单。对于平均计算,会包含更少的清晰计算(例如,检查一个数是大于还是小于另一个),其计算成本可能会更高,会有大约10000-50000倍。
python 最简单的方法写一个程序。
推荐你去看一看一些简单的python 游戏的编程的书
还有就是python 的基础要练习好,找个人给你写一段代码你就能学会吗?
英语python supports objects怎么翻译?
python supports objects可以翻译为“python支持对象。”
重点单词:python:英 [ˈpaɪθən] 美 [ˈpaɪθɑːn]
n. 蟒,蚺蛇;(计算机)巨蟒语言(一种高级通用编程语言)
词形变换: 复数 pythons 。
相关短语:
python reticulatus 网纹巨蛇 ; 蟒蛇皮 ; 网纹蟒蛇
Calabar Python 橡皮蟒
Python anchietae 安哥拉蟒
Reticulated python 网纹蟒 ; 网纹蟒蛇
双语例句:
An African rock python has become the toy of two leopards!
一只非洲岩蟒竟然成为了两只非洲豹的玩具!
In a Python program, you access each class as a Python module.
在python程序中,您将以python模块的形式使用这些类
Why is the python protected from getting some type of heart disease?
为什么巨蟒可以远离一些种类的心脏病呢?
你都用Python 来做什么?
当我知道可以做这些之后,我特别想会。因为论文查阅、答案确认查询;想知道豆瓣8分以上电影,或者穿越类的电影、处理工资数据考核表等。
可以干什么
1、上学吧答案神器 主要实现的是无限制获取上学吧网站上的题目答案(绕过 IP 限制),并实现了自动识别验证码,只用输入某个题目的网址,即可一键获取答案,速度非常快。「想要哈哈,自己或者给孩子辅导作业必备啊?」
2、抓取某系统内全部学生姓名学号及选课信息
3、扫描研究生系统上的弱密码用户、模拟登录图书馆系统并自动续借
4、给钓鱼网站批量提交垃圾信息 经常会收到含有钓鱼网站链接的短信的,一般都是盗取 QQ 密码的偏多,其实可以使用 Python 来批量给对方的服务器提交垃圾数据(需要先抓包),这样骗子看到信息之后就不知道哪些是真的哪些是假的了,说不定可以解救一部分填了密码的同学。
5、网易云音乐批量下载 可以批量下载网易云音乐热歌榜的歌曲,可以自己设定数量,速度非常快。
6、批量下载读者杂志某一期的全部文章
7、 获取城市PM2.5浓度和排名
8、爬取某网商品价格信息
你都用 Python 来做什么?
那Python 作为一种功能强大的编程语言,因其简单易学而受到很多开发者的青睐。那么,Python 的应用领域有哪些呢?
Python 的应用领域非常广泛,几乎所有大中型互联网企业都在使用 Python 完成各种各样的任务,例如国外的 Google、Youtube、Dropbox,国内的百度、新浪、搜狐、腾讯、阿里、网易、淘宝、知乎、豆瓣、汽车之家、美团等等。概括起来,Python 的应用领域主要有如下几个。
Web应用开发
Python 经常被用于 Web 开发,尽管目前 PHP、JS 依然是 Web 开发的主流语言,但 Python 上升势头更劲。尤其随着 Python 的 Web 开发框架逐渐成熟(比如 Django、flask、TurboGears、web2py 等等),程序员可以更轻松地开发和管理复杂的 Web 程序。例如,通过 mod_wsgi 模块,Apache 可以运行用 Python 编写的 Web 程序。Python 定义了 WSGI 标准应用接口来协调 HTTP 服务器与基于 Python 的 Web 程序之间的通信。举个最直观的例子,全球最大的搜索引擎 Google,在其网络搜索系统中就广泛使用 Python 语言。另外,我们经常访问的集电影、读书、音乐于一体的豆瓣网(如图 1 所示),也是使用 Python 实现的。
图1用Python实现的豆瓣网
不仅如此,全球最大的视频网站 Youtube 以及 Dropbox(一款网络文件同步工具)也都是用 Python 开发的。
自动化运维
很多操作系统中,Python 是标准的系统组件,大多数 Linux 发行版以及 NetBSD、OpenBSD 和 Mac OS X 都集成了 Python,可以在终端下直接运行 Python。有一些 Linux 发行版的安装器使用 Python 语言编写,例如 Ubuntu 的 Ubiquity 安装器、Red Hat Linux 和 Fedora 的 Anaconda 安装器等等。另外,Python 标准库中包含了多个可用来调用操作系统功能的库。例如,通过 pywin32 这个软件包,我们能访问 Windows 的 COM 服务以及其他 Windows API;使用 IronPython,我们能够直接调用 .Net Framework。通常情况下,Python 编写的系统管理脚本,无论是可读性,还是性能、代码重用度以及扩展性方面,都优于普通的 shell 脚本。
人工智能领域
人工智能是项目非常火的一个研究方向,如果要评选当前最热、工资最高的 IT 职位,那么人工智能领域的工程师最有话语权。而 Python 在人工智能领域内的机器学习、神经网络、深度学习等方面,都是主流的编程语言。可以这么说,基于大数据分析和深度学习发展而来的人工智能,其本质上已经无法离开 Python 的支持了,原因至少有以下几点:
目前世界上优秀的人工智能学习框架,比如 Google 的 TransorFlow(神经网络框架)、FaceBook 的 PyTorch(神经网络框架)以及开源社区的 Karas 神经网络库等,都是用 Python 实现的;微软的 CNTK(认知工具包)也完全支持 Python,并且该公司开发的 VS Code,也已经把 Python 作为第一级语言进行支持。Python 擅长进行科学计算和数据分析,支持各种数学运算,可以绘制出更高质量的 2D 和 3D 图像。总之,AI 时代的来临,使得 Python 从众多编程语言中脱颖而出,Python 作为 AI 时代头牌语言的位置,基本无人可撼动!最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可以价位@762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~
网路爬虫
Python 语言很早就用来编写网络爬虫。Google 等搜索引擎公司大量地使用 Python 语言编写网络爬虫。从技术层面上将,Python 提供有很多服务于编写网络爬虫的工具,例如 urllib、Selenium 和 BeautifulSoup 等,还提供了一个网络爬虫框架 Scrapy。
科学计算
自 1997 年,NASA 就大量使用 Python 进行各种复杂的科学运算。并且,和其它解释型语言(如 shell、js、PHP)相比,Python 在数据分析、可视化方面有相当完善和优秀的库,例如 NumPy、SciPy、Matplotlib、pandas 等,这可以满足 Python 程序员编写科学计算程序。
游戏开发
很多游戏使用 C++ 编写图形显示等高性能模块,而使用 Python 或 Lua 编写游戏的逻辑。和 Python 相比,Lua 的功能更简单,体积更小;而 Python 则支持更多的特性和数据类型。比如说,国际上指明的游戏 Sid Meier's Civilization(文明,如图 2 所示)就是使用 Python 实现的。
图2Python开发的游戏
除此之外,Python 可以直接调用 Open GL 实现 3D 绘制,这是高性能游戏引擎的技术基础。事实上,有很多 Python 语言实现的游戏引擎,例如 Pygame、Pyglet 以及 Cocos 2d 等。以上也仅是介绍了 Python 应用领域的“冰山一角”,例如,还可以利用 Pygame 进行游戏编程;用 PIL 和其他的一些工具进行图像处理;用 PyRo 工具包进行机器人控制编程,等等。有兴趣的读者,可自行搜索资料进行详细了解。
谁来帮帮我
全部攻略都在下面 你可以把它复制到自己的文当 然后把已经做过的任务从里面删除掉
Grand Theft Auto: Vice City(简称GTAVC)是一款高自由度的美版游戏,任务繁多,多是以黑帮生活为背景的竞速和射击任务,每个任务都有不同的难度和奖金,完成主流任务通关大约需要50小时(个人经验),100%任务通关需要80-100小时。以下为各主流及支线任务及资产任务详解,欢迎大家及时补充。
序接受任务前的准备
初期的任务不需要什么装备,以抢车和熟悉环境为主。
此时应重点熟记喷漆处/换衣处/武器商店及存盘点的位置。
第一章:主流任务(大部分任务与过关有着必然的联系,有些虽没有联系,但可以增加财产,提供免费枪支和车辆等)
1) Ken Rosenberg(律师处)的任务
******An Old Friend******到达指定地点。
******The Party******到换衣点换好衣服到达海边的游艇处参加晚会,驾车送Mercedes到Pole Position Club。报酬:100
******Back Alley Brawl******到Malibu Club找Kent Paul了解情况后,到绿点标志处找到厨师,击倒他并拿他的电话,这时Lance Vance出现,2人被其它厨师追杀,不要恋战,开Lance的车和他一起逃跑到指定地点。
报酬:200
******Jury Fury******用锤子恐吓两个陪审员,按黄点所指找到第一个,用锤子击打车门,直到他下车逃离,按黄点找到第二个人的车,用锤子打车门直到人出来后逃离。
报酬:400
******Riot******先到Raphael's处,后到罢工工人处,击打工人引发骚乱后,进门杀死警卫,射击油桶引发3辆车爆炸(用其它车撞击也行)
报酬:1000
2) Juan Garcia Cortez- The Colonel(海边)的任务
******Treacherous Swine******用电锯杀死Gonzalez,会引发2个警星,到喷漆处消除报酬:250
******Mall Shootout******到指定地点找一个信使取文件,见面后,信使叛变并逃离,杀死附近枪手后,驱车追击信使,将他杀死后,取得文件,消除警星后到指定地点。
报酬:500
******Guardian Angels******取到枪后和Lance一起到指定地点参加交易,先到侧面的楼上持枪掩护,待另一伙人引发冲突后,射杀敌人,保护Diaz和Lance,杀光敌人后,会出现两个骑摩托的人抢走钱,其中一人逃离时翻车,骑上该车追击另一人,杀死该人后,把钱带回还给Diaz报酬:1000(本任务较难,当冲突发生后,最好在地面用电锯或自动瞄准的武器将敌人全部杀死,后追击时,边追边开枪射击较有效)
******Sir, Yes Sir!******偷一辆坦克到指定地点,可以直接抢,如果被士兵发现,会打不开门也可以一直跟随等他们停车离开时,再抢。
报酬:2000
******All Hands On Deck******保护Colonel安全离开。
先射杀跟随游艇四周的枪手,后击毁前方阻截的游艇,这时会出现直升飞机,击毁后过关。
报酬:5000任务必备M60/M4/机枪和火箭筒(打飞机最有效),一定要在直升机尚未飞临游艇上空时击毁它,否则会有敌人下来。
3) Ricardo Diaz- Coke Baron(中心岛庄园处)的任务
******The Chase******尾随一个毒贩直到他的目的地。报酬:1000
******Phnom Penh '86******乘坐Lance驾驶的直升飞机消灭一个庄园的敌人,后下飞机取几个装钱的文件包。报酬:2000本任务要点是空中多打油桶引爆,下飞机后还会有敌人
******The Fastest Boat******激战后,到船厂内启动开关放下船后,驾船到指定地点。
报酬:4000
******Supply And Demand******驾船第一个到达目的地,后射杀所有跟随敌人。
本任务考验驾驶技术,记熟路线就可过关。
报酬:10000
4) Tommy Vercetti- Criminal Empire(V点)的任务
******Death Row******在限制时间内,开车到指定地点,救出Lance后,将他送到医院本任务一定要有重型武器,能有坦克是最好,而且速度要快,因为Lance正在慢慢死去。报酬:没有
******Rub Out******和Lance一起,闯入Diaz的豪宅杀死他!
应该先在外围用狙击步枪杀死保镖后再攻入室内。
报酬:50000并且拥有了Diaz的豪宅,可以存盘/换衣,还有常备的跑车和加长豪华车,楼顶还有停机坪!
******Shakedown******在五分钟内,来到North Point Mall并打碎所有红点显示的玻璃。
报酬:2000
******Bar Brawl******带领手下来到Front Page Bar杀死守卫后,在五分钟内杀死指定的其他人。报酬:4000
******Copland******到达指定地点后,增加警星以来警察,将警车引入车库后,换警装到达North Point Mall,在咖啡厅内装如炸弹,5秒之内逃离,带Lance一起上车到达指定地点。
报酬:10000
******Cap The Collector******阻止Mafia到你的产业去收钱雷达上会显示黄点并告诉你敌人正在干什么,在敌人收取全部产业钱之前,追上并杀死敌人。报酬: $30,000
******Keep Your Friends Close******最后一个任务(在完成夜总会和印钞厂等资产任务后出现):杀死抢上门来的朋友任务开始,Lance和Sonny Forelli打上门来,撬保险柜,这时钱数在疯狂的减少,先杀死喽罗,后到顶层杀死Lance,下楼后,遇到Sonny Forelli及其手下,杀死他们,全部清关。
报酬:30000
5) Avery Carrington的任务(接受任务地点在未竣工的大楼附近)
******Four Iron******换上高尔夫球衣,来到球场,乘球车来到指定地点,杀死在场所有人(头目和保镖)。报酬:500
******Demolition Man*******纵模型飞机到对面的大楼安装炸弹。
比较稳妥的办法是先别取炸弹,*纵飞机到目的地从一楼到四楼先用飞机翅膀将工地工人和守卫屠杀一遍,然后回来取炸弹,此时记时开始,*纵飞机来到各层有标记的油桶上方投放即可。
报酬:1000
******Two Bit Hit******换衣后,驾车来到指定地点,撞死附近的敌人后,灵车会逃跑,在其侧面撞击直至其爆炸(尾随的话,它会扔棺材,车撞上即炸)。
报酬:2500
6) Love Fist(合唱团)的任务
******Love Juice******先到指定地点为LOVE FIST买毒品,当毒贩交易后逃跑时,开车追上并杀死他并取他身上的东西,随后应要求去接Mercedes,限时送回地点。
报酬:2000
******Psycho Killer******乘坐LOVE FIST的车(很慢)到指定地点,一狂人杀人后逃跑,追杀之。
报酬:4000
******Publicity Tour******(好像生死时速的情节)
上车后,发现有炸弹,车必须保持全速,否则会爆炸,小心驾驶直到炸弹排除。报酬:8000
7) Big Mitch Baker(黑心标志)的任务
******Alloy Wheels of Steel******驾驶摩托车,参加竞赛取得第一报酬:1000
******Messing With The Man******时限内将警星达到4颗以上(尽情的射击吧,但要注意安全)
简单的做法是对准一辆车及其废墟不停的射击。
报酬:2000
******Hog Tied******骑摩托车,到指定地点杀死所有的人,后到一斜坡处---精彩的摩托飞跃!之后,找到指定的红色车,回到领取任务处。
报酬:4000
8) Phil Cassidy(P点)的任务
******Gun Runner******驾车追击运送枪支的车辆,撞击后拾取掉落的枪支,全部取得后,杀死和击毁剩余的人员和车辆。
报酬:2000
******Boomshine Saigon******送受伤的PHIL去医院,抵达时又改去另一地方。
(开车的时候真好像喝了二斤白酒,整个画面天旋地转)
报酬:4000
9) Auntie Poulet- The Haitians(胖黑女人)的任务
******Juju Scramble******在警察到来之前取得三处物品,之后,警星变为四颗,逃吧。
报酬:1000
******Bombs Away*******纵模型飞机炸毁逃跑的汽车和海面的船(黄点标志)
这种飞机不好*纵,但炸弹是无限的,找到目标放就是了(还有两架备用)报酬:2000
******Dirty Lickin's******在Haitians全死之前,杀死所有的Cubans。
先到对面从楼梯到上到屋顶,用狙击步枪快速杀死敌人,当敌人增援抵达时,采用机枪或火箭筒射杀。
报酬:4000
Umberto- The Cubans(Cuba Cafe处)的任务
******Stunt Boat Challenge******又是赛艇比赛报酬:1000
******Cannon Fodder******驾车带领同伙抵达指定地点与Haitians作战,先用火箭筒射杀前方敌人,后用狙击步枪射杀屋顶的人,再用重武器射杀仓库中的敌人,后驾车逃回领取任务地点。(警星会有两颗)
报酬:1000
******Naval Engagement******由RICO驾船,你来开枪,到指定地点杀死所有船上的敌人,取得文件箱后,逃离。(此时,警星会到五颗!)
报酬:4000
******Trojan Voodoo******先抢一辆的Haitian的车(最好是Haitian Voodoo,在不远的胡同里有一辆)到达指定地点后,尾随入工厂,射杀所有Haitian后,安放三颗炸弹后,限时从进来的大门(已锁住)右侧的楼梯上到二楼后逃离。
报酬:10000
10)占有资产的任务
先买下相关资产,按要求完成任务后,会开始盈利,每天记着来收钱。
1。码头(Boatyard)
******Checkpoint Charlie******到码头边,上赛艇后,任务开始,开船完成即可完成后,显示码头开始为你盈利,每天2000
2。冰激凌店(Cherry Popper Ice Cream Factory)
******Distribution******开冰激凌车到市内卖50根不被警察抓即可完成,没卖完前不能下车。
一定要到人多而且好逃跑的地方,不要到帮会聚集的地方。
每卖3-4根就会增加警星,这时一定要逃跑,待警星没了再卖。
完成后,显示冰激凌店为你盈利,每天3000
3。脱衣舞厅(Pole Position)
******Helping Out The Strippers******到里面的第一间房看舞女表演(不要让家人看到呀),花费600后,任务完成。完成后,显示舞厅为你盈利,每天4000
4。计程车公司(Kaufman Cabs)
******VIP******开车到指定地点接一VIP,这时另一辆车抢生意,紧追并撞击它直到VIP下车到你的车上后,将VIP送到机场。
报酬:1000
******Friendly Rivalry******找到另一家公司的计程车并撞毁它们。
报酬:3000
******Cabmageddon******驾车到指定地点接客人,结果发现是敌对公司的圈套,一堆车向你涌来,要撞毁你,你要在限时内保持车的安全,之后,敌对车队的首脑驾驶着斑马纹的车和你决斗,撞毁并杀死他。
报酬:3000完成后,显示计程车公司为你盈利,每天5000
5。电影厂(Film Studio)
******Recruitment Drive******到指定地点接Candy和Mercedes回电影厂,追击并杀死阻止的人。
报酬:1000
******Dildo Dodo******到指定地点驾驶海上飞机散发新电影海报。
先找到最远的一个蓝点,驾机穿越它,会出现一个红点,再穿越,则会出现下一个蓝点,依次在油耗尽前完成。
报酬:2000
******Martha's Mug Shot******先驾驶骨架飞机追踪汽车到目的地,后降落飞机,从侧面的楼梯进入大厦到标志指定处,拿出相机向对面游泳池方向,对准目标拍三张照片,会触发警星至两颗,消灭阻击的警卫后回电影厂(最好不要乘飞机,因为电影厂也有敌人在攻击你)。
报酬:4000
******G Spotlight******驾驶摩托车飞跃一个又一个标志点,最后来到有探照灯的屋顶处,扭转灯的方向,将它对准你的XXX广告。
其实有更简单的方法来完成,就是当你乘电梯来到楼顶准备第一跳时(第一个标志点已经出现),这时你下楼在对面楼的院内(上两层陡坡)平台上,有一架直升飞机,开着它去穿越红色标志点吧。
报酬:8000完成后,显示电影厂为你盈利,每天7000
6。印钞厂(Print Works)
******Spilling The Beans******先到酒吧处得到信息,后到码头的一艘船上的上三层甲板处取得相关资料,出来后,警零大做(两颗警星),射杀警卫,快跑吧。
报酬:2000在登船前,要先用狙击步枪将船高处的警卫射杀,之后冲到船上射杀遇到的警卫出来后,遇到的警卫是杀不完的,看准间隙逃跑是上策。
******Hit The Courier******到码头处,等直升飞机降落后,一个信使会携带伪钞电版上车,杀死敌人撞毁该车,取得电版,回印刷厂。
报酬:5000完成后,显示印钞厂为你盈利,每天8000
7。夜总会(Malibu Club)
******No Escape******开车到警察局门前,进入到侧面房间换装,到另房间取钥匙,释放CAM后,杀死阻拦的警察后,带领CAM逃离,到喷漆处取消警星后,去CAM的住处。
报酬:1000
******The Shootist******到射击场限时射击目标,在三场中,取得60分。
报酬:2000此处通过后,会常备一个射击任务,就是限时一场取得30分,报酬500
******The Driver******在警察的拦截下和他人疯狂飙车,驾车穿越一个又一个标志点吧
******The Job******打劫银行(真是无恶不作呀,越打越感到祸国殃民的说)
进到银行,射杀警卫(不要杀死在里面房间的经理),到金库门前打不开,要回来带经理去,还是不行,再到大厅去询问PHIL,这时SWAT攻入,及时射杀并逃离银行,这时外面已被包围,血战后,驾车带领你的两名同犯回CAM处。报酬:30000完成后,显示夜总会为你盈利,每天10000
8。汽车展示厅(Car Showroom)
汽车展示厅需要汽车的名单有四组,每组六款车找齐第一组,展示厅每天为你盈利1500,第二/三/四组,每天盈利2500全部集齐,每天盈利9000第一组A)Landstalker:连接Starfish Island和Little Havana的大桥附近的建筑处B)Idaho:常见于downtownC)Esperanto:常见于downtown和Vice Point。
D)Stallion:常见于downtown和Little Havana。
E)Rancher:常见于Ocean Beach和Vice PointF)Blista Compact:常见于Ocean Beach和Washington Beach报酬:Deluxo第二组A)Sabre:常见于downtownB)Virgo:常见于downtownC)Sentinel:Sunshine Autos Showroom停有一辆,街上也可找到D)Stretch:Vercetti Estate处停放一辆E)Washington:常见于WashingtonF)Admiral:常见于Washington报酬:Sabre Turbo第三组A)Cheetah:连接Washington和Starfish Island的大桥附近的建筑处B)Infernus:Vercetti Estate处C)Banshee常见于Ocean BeachD)Phoenix:常见于Ocean BeachE)Comet:常见于Ocean BeachF)Stinger:常见于Ocean Beach报酬:Sandking第四组:A)Voodoo:常见于Little HavanaB)Cuban Hermes:常见于Little HavanaC)Caddy:高尔夫球场附近的路上D)Baggage Handler:Escobar机场停车坪E)Mr. Whoopee:在冰激凌厂内F)Pizza Boy:卖Pizza处报酬:Hotring Racer
***找车的经验:以上只是指出了车的常见位置,其实你如果原地转的话,大部分的车(指前三组,第四组大多是特殊车辆)都可以遇到。
车辆清单是先给出第一组,找齐后,再给第二组,依次类推为了节省时间,你最好先买几个车库,在找当组的车辆时,如果找到后面组的车辆你就把车开到车库存放,这样如果需要这种车的话,你直接来提车就可以。在离LOVE FIST合唱团不远的位置,有个三个位置停车库,你先将它买下,然后到离此不远的海边的一个大型停车场,开始兜圈,你会发现每转一圈,停的车种都有不同,这样,你发现需要的,就开到车库(一个车库可停2-3辆)只要你不停的转下去,相信前三组车就会到手的。
第四组中,Voodoo在胖黑女人门前停了一辆,Cuban Hermes就是曾经在出租公司任务中对手公司头目坐的那辆,Caddy在灯塔附近的草丛中有一辆,具体位置就是走过指向灯塔的小桥后,走沿海边的路,你会看到右边的草中有闪光,那就是了。
强烈推荐完成这一任务,因为完成后,奖励的4辆车中,楼上的两辆最酷,一辆越野车一辆是号码为27的赛车,用这辆赛车,在所有的赛车任务中,都会无敌!
当你拥有好车时,还可以到展示厅来参加飙车比赛,胜利会有不同奖金,但是有时飙车的同时会引发两颗警星相关比赛如下:第一场:Terminal Velocity参赛费:100报酬:400第二场:Ocean Drive参赛费:500报酬:2000第三场:Border Run参赛费:1000报酬:4000第四场:Capital Cruise参赛费:2000报酬:8000第五场:Tour!参赛费:5000报酬:20000第六场:Vice City Endurance参赛费:10000报酬:40000
第二章:支线任务(与正常通关没有关系,但涉及到100%任务完成度)
1.电话任务(Phone Missions)
******Road Kill******在pizza小子送完货前杀死他报酬:500
****** Waste The Wife******开车到指定地点,当你主妇出来并启动车后,于其后追击并将车撞毁至爆炸然后弃车脱身,让一切发生的像一场汽车肇事。(只能如此,并且你要离现场足够远)报酬:2000
****** Autocide******9分钟内,杀死指定的几个人。
第一个人在头顶的广告牌上工作,所以你要仰视狙击第二个人在街角的保安车中坐着,保持一定的距离(太近会被发现)狙击。第三和第四人在街角的车中,保持一定的距离狙击,嫌麻烦的话,用火箭筒一击毙命(最好先击毙司机,另一人有武器)
第五个人在桥边的游艇上,狙击第六个人在街上骑着摩托车,冲过去撞击。
由于有限时,所以前四组一定要狙击毙命,让他们发现逃跑的话,你就有得追了。报酬:4000
****** Check out at the check in******先行跟踪,保持不被发现,当雷达上的标志消失后,射杀和女人讲话的男人(手持文件箱)上去夺过箱子后开车将文件送至郊区的武器店(中途会有敌人截杀,作好换车的准备)。报酬:8000
****** Loose Ends******乘直升机到交易进行处,尽可能用狙击步枪射杀所有在场黑帮,后夺取文件箱,飞往飞机场停机坪。
报酬:16000
2.特技跳跃任务(Unique Jumps)
游戏中有36处供你驾驶摩托车展示特技跳跃,并且有精彩的多角度慢动作。摩托车一定要高速的,首选PCJ-600
第一个集中地点:起始宾馆附近(7处)
01)路边靠墙的一处木板,从草地方向跳跃02)《Guardian Angels》任务处的楼梯03)同上任务处的斜后方的楼梯04)沿胡同向前,离此不远的一处楼梯05)再向前的木箱,冲向它并落到胡同的中间(不是屋顶)
06)再向前,冲向另一个箱子,以求落到街对面的屋顶07)T型停车场南向斜坡
第二处集中地点:夜总会附近(4处)
08)西向,跳跃水泥台,飞跃河09)南向,跳跃另一处水泥台,飞跃桥10)从上面的桥来到通往Starfish Island的桥,找到土丘,飞跃河11)飞跃后,找到附近一处水泥台,飞跃河
第三处集中地:OCEAN BEACH(3处)
12)一处没有窗户的工地,到三层北向跳跃13)一处白色底柱的建筑,南向跳跃楼梯,到对面屋顶14)继续跳跃南向小楼梯,飞跃街道
第四处集中地:Washington Mall停车场(2处)
15)到顶层东向飞跃到对面建筑16)在该建筑上有一排通风口,从最左边的飞跃到下一建筑
第五处集中地:北边的码头(2处)
17)在第一处泊位间作飞跃18)在另一处泊位间作飞跃
第六处集中地:Starfish Island(1处)
19)一处橘黄色房屋侧面的小楼梯
第七处集中地:Prawn Island(1处)
20)一处白色阶梯,再连跃紧接着的陡坡后,到一屋顶,通过屋顶陡坡,飞跃电影厂的门
第八处集中地:飞机场(8处)
21)"VC Surf 3D"广告牌的南向陡坡,可跃至机场屋顶22)主建筑内东向机动车坡路,跃至VC Transport大厦顶23)再向南有一长陡坡,可跃至大街上24)机场东向引桥的附近的机动车坡路,作西向跳跃25)机场西向引桥,作西向跳跃26)接上一个动作后,发现另一条东向机动车坡路27)引桥附近找到一红色雷达,东向是机动车坡路,借雷达飞跃屋顶28)西向冲向一黄黑标志物,飞跃雷达屋顶(不是雷达)
第九处集中地:Little Haiti and Havana(4处)
29)计程车公司东向斜坡30)计程车公司南向报废公车附近的斜坡,飞跃公车31)公车附近有下水道管,找到飞跃管道的斜坡32)Cuban's caf向南,找到在雷达上显示为+的胡同,选择最南的一个作连续跳跃
第十处集中地:〈Hog Tied〉任务(1处)
33)任务中的陡坡
第十一处集中地:〈G-Spotlight〉任务(3处)
34)任务中第一个飞跃(打破玻璃那个)
35)任务中从医院楼顶的陡坡飞跃至Secondhand Circuitry shop36)任务中最后一个飞跃(至探照灯)
报酬:每次正确的跳跃+100,全部动作完成,报酬:1000000
3.体育馆赛车任务(Hyman Memorial Stadium Races)
体育馆每晚2000点开门,举行车赛,胜利有奖金获得。
以下为相关比赛介绍:
******Bloodring******
驾驶Bloodring Banger穿越足够多的目标点(每过一点有加秒奖励),以凑足到一分钟为限。
中途会有其它车围追堵截,车毁或时间为零则失败,不要恋战。
报酬:1000每撞毁一辆车+100
******Dirtring******驾驶Sanchez穿越所有目标点。
较难的之处是穿越窄墙上的点,你需要不停的变化远近和左右视角以确定你的车开在上面。
报酬:50000(5分钟内完成)
10000(5-10分钟内完成)
5000(超过10分钟完成)
******Hotring******驾驶Hotring Racer穿越目标点跑12圈报酬:5000(第一名)
1500(第二名)
500(第三名)
4.隐藏包裹(Hidden Packages)
和GTA3一样,本游戏也有100个隐藏的包裹等待你去寻找,对应不同的数目,奖励如下:10个----防弹衣20个----电锯30个----PYTHON40个----火焰喷射器50个----镭射狙击枪60个----机枪70个----火箭筒(以上出现在豪宅和起始宾馆门口)
80个----水上直升机(在你的豪宅的顶层停机坪)
90个----坦克(空军基地中)
100个---100000+阿帕奇(空军基地中)
5.街头暴力任务(Rampages)
当你看到有一个中间有骨头(更像是眼镜或录音磁带的标志)标志的粉红色转动的光盘时,走过去,你就会接到街头暴力任务。这种任务都是让你限时2分钟内用各种武器杀一定数量的人或毁坏一定数量的车,第一次完成,报酬是50再完成的话,在前一次的基础上+50以下,列出所有的标志地点,计35个:
东岛任务:
01)***Kill 30 Gang Members in 2 Minutes with Molotov Cocktails***
地点:Ocean View Hotel处向南走,找到指向灯塔的车道,沿着该路走,到草丛附近会发现标志
02)***Run Over and Kill 30 Gang Members in 2 Minutes***
地点:来到Ocean Beach海滩,在主海滩和灯塔之间有标志
03)***Destroy 10 Vehicles in 2 Minutes with the Rocket Launcher***
地点:到在游戏开始时曾经去参加聚会的游艇码头,在另一个门处找到一艘船离港后往南找一排茅屋,在一个没顶的茅屋里有标志
04)***Kill 25 Gang Members in 2 Minutes with the Shotgun***
地点:Washington Mall的屋顶
05)***Kill 10 Gang Members in 2 Minutes with a Katana***
地点:从hospital in Washington南向沿路至第一个左转后,有一排建筑,在第个建筑物,两座房屋之间的树后有标志
06***Kill 20 Gang Members in 2 Minutes with a Chainsaw***
地点:同上区域,找到“TO LET”字样的门,附近有标志
07)***Kill 25 Gang Members in 2 Minutes with a PSG-1***
地点:自Ocean View Hotel向南走第一个路口右转直走到路的尽头,找到一个长着植物的汽车修理厂,开车到屋顶后经过坡路到下一层屋顶,在一个角落里有标志
08)***Kill 25 Gang Members in 2 Minutes with the M4***
地点:从医院朝南方向经过第一个路口右转后沿路直行,找到右边两栋带楼梯的楼,上到第二座楼,右边的墙上有标志,想办法爬上去
09)***Kill 25 Gang Members in 2 Minutes with an MP5***
地点:从Starfish Island出发,上large east island的桥,下桥后,上右边的坡路,进到一个有水池和酒店的区域,找到有水池围绕的矩形建筑,正门东向有标志
10)***Kill 30 Gang Members in 2 Minutes with the SPAS-12***
地点:自Ocean View Hotel向南行,当路不再朝南,而改向西时下车,找到一酒店,面向海滩方向,在酒店的墙和草丛间,有一个标志
11)***Kill 10 Gang Members in 2 Minutes with the PSG-1***
地点:上述酒店的后面,越过低围墙,找到有干涸泳池的区域,在跳水板找到标志
12)***Drive-by and Waste 35 Gang Members in 2 Minutes with an Uzi***
地点:Starfish Island东向下桥后,第一个路口左转,朝北走到路的尽头,靠近水的附近找到标志
13)***Kill 20 Gang Members in 2 Minutes with a Chainsaw***
地点:east island连接Leaf Links的桥附近,右边墙的豁口处可抵达海边泊位,泊位边,靠近桥的方向,找到标志
14)***Kill 30 Gang Members in 2 Minutes with a Rocket Launcher***
地点:North Point Mall,进入商场2楼有植物的区域,找到标志
15)****Kill 35 Gang Members in 2 Minutes with an M4***
地点:North Point Mall,商场东门外,一堵矮墙后找到目标
16)***Kill 25 Gang Members in 2 Minutes with a Python***
地点:North Point Mall和海滩间的建筑中,找一个黄白门前有楼梯的矮建