1.不换行打印:
print("AAA", end = ' ')
print("BBB", end = '')
print("CCC", end = '**')
#输出
AAA BBBCCC**
2.格式化数字:
format(item, format-specifier)
#"10.2f" 10为域宽度,2为精度,f为转换码
>>> print(format(57.467657, "10.2f"))
57.47
#默认为右对齐,加"<"为左对齐,注意打印结果后面的空格
>>> print(format(57.467657, "<10.2f"))
57.47
---------------------------------
"10.2f"
"10.2e"
"5d"整数
"5x"十六进制数
"5o"八进制数
"5b"二进制数
"10.2%"格式为百分数
"50s"字符串
"<10.2f"向左对齐格式化项目
">10.2f"向右对齐格式化项目
3.最小化数值错误:
在循环继续条件中使用浮点数可能会导致数值错误。
sum = 0
i = 0.01
while i <= 1.0:
sum += i
i += 0.01
print("The sum is", sum)
print('i is',i)
#输出结果
The sum is 49.50000000000003
i is 1.0000000000000007
但正确结果应该为50.5,因为循环的每次迭代中变量i都递增0.01,当循环结束时,i的值稍稍大于1,这导致最后一个i的值没有被加到sum上。
最基本的问题是浮点数被近似表示了。
4.问题:蒙特卡洛模拟
使用随机数和概率来解决问题
例子:求π的近似值
首先绘制一个带外接正方形的圆。
假设这个圆的半径为1,因此,这个圆的面积就是π,而正方形的面积为4,在这个正方形内随机产生一个点,这个点落在圆内的面积为circleArea/squareArea =π/4
import random
NUMBER_OF_TRIALS = 3000000
numberOfHits = 0
for i in range(NUMBER_OF_TRIALS):
x = random.uniform(-1, 1)
y = random.uniform(-1, 1)
if x ** 2 + y ** 2 <= 1:
numberOfHits += 1
pi = 4 * numberOfHits / NUMBER_OF_TRIALS
print("PI is ", pi)
5.显示素数
在五行李显示前50个素数,每行10个
编程步骤:
先编写代码判定给定的那个数字是否为素数,然后再用一个循环来扩展它,判断其它数字是否为素数。
NUMBER_OF_PRIMES = 50 #总计要显示素数的个数
NUMBER_OF_PRIMES_PER_LINE = 10 #每行10个
count = 0 #素数的个数
number = 2 #素数起始数字
print("The first 50 prime numbers are")
#查找素数
while count < NUMBER_OF_PRIMES:
isPrime = True
divisor = 2
while divisor <= number / 2:
if number % divisor == 0:
isPrime = False
break
divisor += 1
if isPrime:
count += 1
print (format(number, "5d"), end = '')
if count % NUMBER_OF_PRIMES_PER_LINE == 0:
print()
number += 1
#输出结果
The first 50 prime numbers are
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 101 103 107 109 113
127 131 137 139 149 151 157 163 167 173
179 181 191 193 197 199 211 223 227 229