[MoocPython课程]基本数据类型

基本数据类型

1.数值型数据:

实例之天天向上1.0:

每天进步的力量:

每天进步1%o,一年下来进步多少呢

每天退步1%o,一年下来退步多少呢

给出代码:

dayfactor = 0.001
up = pow(1+dayfactor,356)
down = pow(1-dayfactor,365)
print('天天向上最终成为原来的{:.2f}倍,天天向下最终成为原来的{:.2f}倍'.format(up,down))

结果:天天向上最终成为原来的1.43倍,天天向下最终成为原来的0.69倍

这样我们可以通过修改dayfactor而轻松计算不同进步幅度的最终进步/退步结果

例如0.1倍时

天天向上最终成为原来的34.55倍,天天向下最终成为原来的0.03倍

实例之天天向上2.0:

工作日的力量:

入过我们加入一个新的条件,即,只有工作日时进步,周六日会退步

dayup = 1.0
for i in range(365):
    if i%7 in [6,0]:
        dayup = dayup*(1-dayfactor)
    else:
        dayup = dayup * (1 + dayfactor)
print('最终变为原来的{:.2f}倍'.format(dayup))

结果为:最终变为原来的4.63倍

实例之天天向上3.0:

如果我们采取工作日向上的进步方式,且周末退步1%,那么我们工作日要进步多少才能和天天向上进步1%相当呢?

代码实现:

def dayUp(dayfactor):
    dayup = 1.0
    for i in range(365):
        if i%7 in [6,0]:
            dayup = dayup*(1-0.01)
        else:
            dayup = dayup * (1 + dayfactor)
    return dayup

dayfactor = 0.01
while dayUp(dayfactor) < 37.38:
    dayfactor += 0.01
print('每天进步{},工作日进步力量才能追上天天向上进步0.01力量'.format(dayfactor))

代码解析:

我们首先应该将2.0中的工作日进步力量封装成一个函数,以工作日进步的幅度为参数,这样时为了方便这段代码,对于不同进步幅度的复用。封装完成后,我们可以用最传统的蛮力法对不同的进步幅度进行试错,每次进步幅度上涨0.01,这样蛮力计算,直到追赶上天天向上进步0.1的结果。

2.字符串型数据:

字符串的4种表示方法:

‘’,"",’’’’’’,

字符串的8个处理方法:

# 1.字符全部大/小写
print('ABCDEFG'.lower())
print('abcdefG'.upper())
# 2.字符串根据参数分割
print('a,b,c,d,e,f,g'.split(','))
# 3.字符串根据参数计数
print('an apple a day'.count('a'))
# 4.字符替换内容
print('python'.replace('n','123.io'))
# 5.字符串根据width居中,fillchar可选,str.center(width,[fillchar])
print('python'.center(20,'$'))
# 6.去掉字符串中的某些字符 str.strip('chars')
print('= python='.strip('= pn'))
# 7.为字符串添加分隔符, 'tip'.jion(str)
print('^'.join('123456'))
# 8.字符串格式化.format()
print('{}:计算机{}的CPU占用率为:{}%'.format('2020-2-13','C',45))

{:10} 表示默认宽度为10,默认情况左对齐

{:=^20} 表示宽度20,居中对齐,其余用=填充

{:*>20} 表示宽度20,右对齐,其余用*填充

{:<20} 表示宽度20,左对齐

转义符

作用方便’字符的输出

字符串操作符

+代表拼接

*代表重复输出

eval() 字符串转化成数值

str = '一二三四五六日'
num = eval(input())
print("星期"+weekstr[num-1])

字符串的切片:

python采用9801编码

我们若想得到某个特殊字符的编码,可以用ord(‘♉’)函数

例如我们想知道 金牛座符号的 9801 编码

print(ord('♉'))

得到输出:9801

例如我们想得到12星座的字符

for i in range(12):
    print(chr(9801+i),end=' ')

得到输出:♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓ ♔

3.Time库的使用

# Time库的使用
import time
# 1.获取计算机内部的时间值,一个浮点数(1970-1-1 00:00 到现在的时间)
print(time.time())
# 2.返回当前时间,以易读方式表示
print(time.ctime())
# 3.返回一个time结构体,方便提取年/月/日/时间
print(time.gmtime())
# 4.让time结构体,按指定格式生成字符串
t = time.gmtime()
print(time.strftime('%Y-%m-%d %H:%M:%S',t))
# 6.计时器perfcounter()和休眠函数sleep()
start = time.perf_counter()
time.sleep(3)
end = time.perf_counter()
print('开始时间:',start)
print('结束时间:',end)
print(end-start)

实例:模拟输出一个进度条1.0

------执行开始------
 0 %[->         ]%
10 %[*->        ]%
20 %[**->       ]%
30 %[***->      ]%
40 %[****->     ]%
50 %[*****->    ]%
60 %[******->   ]%
70 %[*******->  ]%
80 %[********-> ]%
90 %[*********->]%
100%[**********->]%
------执行结束------

代码实现:

import time
scale = 10
print('------执行开始------')
for i in range(scale+1):
    a = '*'*i
    b = ' '*(scale-i-1)
    print('{:^3.0f}%[{}->{}]%'.format(10*i,a,b))
print('------执行结束------')

实例:模拟输出一个进度条2.0

效果:(单行动态刷新)

100%[**********->]%

代码实现

import time
scale = 10
for i in range(scale+1):
    a = '*'*i
    b = ' '*(scale-i)
    print('
{:^3.0f}%[{}->{}]%'.format(10*i,a,b),end='')
    time.sleep(0.5)

区别:在输出的字符串中包含的’ ’ 的含义为,每次将光标移动至行首,配合end=’'不换行,达到刷新单行的效果

实例:模拟输出一个进度条3.0

改进:加上一个时间

 -----------------------执行开始-----------------------
100%[**************************************************->]5.03S
 -----------------------执行结束-----------------------

import time
scale = 50
start = time.perf_counter()
print('
','执行开始'.center(scale,'-'))
for i in range(scale+1):
    a = '*'*i
    b = ' '*(scale-i)
    c = (i/scale)*100
    per = time.perf_counter() - start
    print('
{:^3.0f}%[{}->{}]{:.2f}S'.format(c,a,b,per),end='')
    time.sleep(0.1)
print('
','执行结束'.center(scale,'-'))

4.测试实例

1.平方根格式化

描述

获得用户输入的一个整数a,计算a的平方根,保留小数点后3位,并打印输出。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

输出结果采用宽度30个字符、右对齐输出、多余字符采用加号(+)填充。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

如果结果超过30个字符,则以结果宽度为准。

输入 输出
示例 1 10 +++++++++++++++++++++++++3.162

代码:

x = eval(input())
sqrt = pow(x,1/2)
print('{:+>30.3f}'.format(sqrt))

代码解析:首先要注意到input函数接收的输入,是字符串型的,我们使用eval函数将输入转化为数值型数据,然后用pow函数计算其平方根,最后在输出中用.format函数进行字符串的格式化。

2.字符串分段组合

描述

获得输入的一个字符串s,以字符减号(-)分割s,将其中首尾两段用加号(+)组合后输出。

输入 输出
示例 1 Alice-Bob-Charis-David-Eric-Flurry Alice+Flurry

代码:

x = input()
list = x.split('-')
print('{}+{}'.format(list[0],list[-1]))

代码解析:首先用input函数接收输入:然后用split函数进行分割,得到分割好的字符串列表,只需要将第一个元素和最后一个元素使用.format函数按照规定格式进行输出就可以了。

原文地址:https://www.cnblogs.com/hzshisan/p/12571085.html