最近秋招,发现本人所处的传统工科工作极其难找。因此痛定思痛,决定在零碎时间从一些简单的方面着手提高自己,因此有了这个属于我自己的百日计划(抄的Github上的一个项目)。
废话不多说,直接跳过Day01的Python背景,有兴趣的同学可以进去看看。
Day02 语言元素
今天主要是简单认识一些Python里的元素、数据类型等
a = 100
b = 12.345
c = 1 + 5j
d = 'hello, world'
e = True
print(type(a)) # <class 'int'>
print(type(b)) # <class 'float'>
print(type(c)) # <class 'complex'>
print(type(d)) # <class 'str'>
print(type(e)) # <class 'bool'>
'''练习一:温度单位转换'''
f = float(input('请输入华氏温度: '))
c = (f - 32) / 1.8
print('%.1f华氏度 = %.1f摄氏度' % (f, c))
'''练习二:输入圆的半径计算计算周长和面积'''
radius = float(input('请输入圆的半径: '))
perimeter = 2 * 3.1416 * radius
area = 3.1416 * radius * radius
print('周长: %.2f' % perimeter)
print('面积: %.2f' % area)
'''练习三:输入年份判断是不是闰年'''
year = int(input('请输入年份: '))
# 如果代码太长写成一行不便于阅读 可以使用\对代码进行折行
is_leap = year % 4 == 0 and year % 100 != 0 or \
year % 400 == 0
print(is_leap)
Day03分支结构
今天主要认识Python的分支结果,简单认识if结果。
'''以下两种写法均表示同一个分段函数 但作者更建议大家使用第一种
(1)'''
x = float(input('x = '))
if x > 1:
y = 3 * x - 5
elif x >= -1:
y = x + 2
else:
y = 5 * x + 3
print('f(%.2f) = %.2f' % (x, y))
'''(2)'''
x = float(input('x = '))
if x > 1:
y = 3 * x - 5
else:
if x >= -1:
y = x + 2
else:
y = 5 * x + 3
print('f(%.2f) = %.2f' % (x, y))
'''Day03 练习1:英制单位英寸与公制单位厘米互换'''
value = float(input('请输入长度: '))
unit = input('请输入单位: ')
if unit == 'in' or unit == '英寸':
print('%f英寸 = %f厘米' % (value, value * 2.54))
elif unit == 'cm' or unit == '厘米':
print('%f厘米 = %f英寸' % (value, value / 2.54))
else:
print('请输入有效的单位')
'''Day03 练习2:百分制成绩转换为等级制成绩'''
score = float(input('请输入成绩: '))
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'E'
print('对应的等级是:', grade)
'''Day03 练习3:输入三条边长,如果能构成三角形就计算周长和面积'''
a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))
if a + b > c and a + c > b and b + c > a:
print('周长: %f' % (a + b + c))
p = (a + b + c) / 2
area = (p * (p - a) * (p - b) * (p - c)) ** 0.5
print('面积: %f' % (area))
else:
print('不能构成三角形')
Day04循环结构
今天认识Python中的循环结构,可以简单分为两种:(1)知道要循环的次数。(2)不知道要循环的次数。
'''如果明确的知道循环执行的次数或者要对一个容器进行迭代(后面会讲到),那么我们推荐使用for-in循环'''
sum = 0
for x in range(101):
sum += x
print(sum)
'''
需要说明的是上面代码中的range(1, 101)可以用来构造一个从1到100的范围,当我们把这样一个范围放到for-in循环中,就可以通过前面的循环变量x依次取出从1到100的整数。当然,range的用法非常灵活,下面给出了一个例子:
range(101):可以用来产生0到100范围的整数,需要注意的是取不到101。
range(1, 101):可以用来产生1到100范围的整数,相当于前面是闭区间后面是开区间。
range(1, 101, 2):可以用来产生1到100的奇数,其中2是步长,即每次数值递增的值。
range(100, 0, -2):可以用来产生100到1的偶数,其中-2是步长,即每次数字递减的值。
因此我们可以计算1~100之间偶数的和
'''
sum = 0
for x in range(2, 101, 2):
sum += x
print(sum)
'''我们也可以对每个数字进行判断是否为偶数然后再进行求和。但显然这是一个复杂的过程'''
sum = 0
for x in range(1, 101):
if x % 2 == 0:
sum += x
print(sum)
'''
如果要构造不知道具体循环次数的循环结构,我们推荐使用while循环。
while循环通过一个能够产生或转换出bool值的表达式来控制循环,
表达式的值为True则继续循环;表达式的值为False则结束循环。
'''
import random
answer = random.randint(1, 100)
counter = 0
while True:
counter += 1
number = int(input('请输入: '))
if number < answer:
print('大一点')
elif number > answer:
print('小一点')
else:
print('恭喜你猜对了!')
break
print('你总共猜了%d次' % counter)
if counter > 7:
print('你的智商余额明显不足')
'''上面的代码中使用了break关键字来提前终止循环,需要注意的是break只能终止它所在的那个循环,
这一点在使用嵌套的循环结构(下面会讲到)需要引起注意。
除了break之外,还有另一个关键字是continue,它可以用来放弃本次循环后续的代码直接让循环进入下一轮。'''
'''和分支结构一样,循环结构也是可以嵌套的,也就是说在循环中还可以构造循环结构。下面的例子演示了如何通过嵌套的循环来输出一个九九乘法表。'''
for i in range(1, 10):
for j in range(1, i + 1):
print('%d*%d=%d' % (i, j, i * j), end='\t')
print()
'''类似的,我们可以将占位符直接设置为对应变量,这样能够更直观的展示每个位置对应的变量,其中:d表示整数,:.2f表示保留两位小数,可根据个人喜好设置
同时也可以不设置数据类型,这样就会输出数据原有类型'''
for i in range(1, 10):
for j in range(1, i + 1):
print(f'{i:d}*{j:d}={i*j:d}', end='\t')
print()
'''Day04 练习1:输入一个正整数判断是不是素数'''
from math import sqrt #sqrt是开平方的意思
num = int(input('请输入一个正整数: '))
end = int(sqrt(num))
is_prime = True
for x in range(2, end + 1):
if num % x == 0:
is_prime = False
break
if is_prime and num != 1:
print(f'{num:d}是素数' )
else:
print(f'{num:d}不是素数')
'''Day04 练习2:输入两个正整数,计算它们的最大公约数和最小公倍数'''
x = int(input('x = '))
y = int(input('y = '))
# 如果x大于y就交换x和y的值
if x > y:
# 通过下面的操作将y的值赋给x, 将x的值赋给y
x, y = y, x
# 从两个数中较小的数开始做递减的循环
for factor in range(x, 0, -1):
if x % factor == 0 and y % factor == 0:
print(f'{x}和{y}的最大公约数是{factor}')
print(f'{x}和{y}的最小公倍数是{x * y // factor}')
break
'''Day04 练习3:打印傻不拉叽的的三角形图案
(1)
*
**
***
****
*****
(2)
*
**
***
****
*****
(3)
*
***
*****
*******
*********
'''
row = int(input('请输入行数: '))
for i in range(row):
for _ in range(i + 1):
print('*', end='')
print()
for i in range(row):
for j in range(row):
if j < row - i - 1:
print(' ', end='')
else:
print('*', end='')
print()
for i in range(row):
for _ in range(row - i - 1):
print(' ', end='')
for _ in range(2 * i + 1):
print('*', end='')
print()
Day05 构造程序逻辑
今天的练习是前面3天的总结与归纳,希望大家能够利用今天练习将前3天的学习巩固归纳。
'''Day05 练习1寻找水仙花数
水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个3位数,
该数字每个位上数字的立方之和正好等于它本身,例如:$1^3 + 5^3+ 3^3=153$。'''
for num in range(100, 1000):
low = num % 10
mid = num // 10 % 10
high = num // 100
if num == low ** 3 + mid ** 3 + high ** 3:
print(num)
'''在此基础上,我们可以实现将一个正整数反转,例如:将12345变成54321'''
num = int(input('num = '))
reversed_num = 0
while num > 0:
reversed_num = reversed_num * 10 + num % 10
num //= 10
print(reversed_num)
'''Day05 练习2百钱百鸡问题
百钱百鸡是我国古代数学家张丘建在《算经》一书中提出的数学问题:
鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
翻译成现代文是:公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?'''
for x in range(0, 20):
for y in range(0, 33):
z = 100 - x - y
if 5 * x + 3 * y + z / 3 == 100:
print(f'公鸡: {x}只, 母鸡: {y}只, 小鸡:{z}只')
'''上面使用的方法叫做穷举法,也称为暴力搜索法,这种方法通过一项一项的列举备选解决方案中所有可能的候选项并检查每个候选项是否符合问题的描述,最终得到问题的解。这种方法看起来比较笨拙,但对于运算能力非常强大的计算机来说,通常都是一个可行的甚至是不错的选择,而且问题的解如果存在,这种方法一定能够找到它。'''
'''Day05 练习3CRAPS赌博游戏
CRAPS又称花旗骰,是美国拉斯维加斯非常受欢迎的一种的桌上赌博游戏。该游戏使用两粒骰子,玩家通过摇两粒骰子获得点数进行游戏。
简单的规则是:玩家第一次摇骰子如果摇出了7点或11点,玩家胜;玩家第一次如果摇出2点、3点或12点,庄家胜;
其他点数玩家继续摇骰子,如果玩家摇出了7点,庄家胜;如果玩家摇出了第一次摇的点数,玩家胜;其他点数,玩家继续要骰子,直到分出胜负。'''
from random import randint
money = 1000
while money > 0:
print('你的总资产为:', money)
needs_go_on = False
while True:
debt = int(input('请下注: '))
if 0 < debt <= money:
break
first = randint(1, 6) + randint(1, 6)
print('玩家摇出了%d点' % first)
if first == 7 or first == 11:
print('玩家胜!')
money += debt
elif first == 2 or first == 3 or first == 12:
print('庄家胜!')
money -= debt
else:
needs_go_on = True
while needs_go_on:
needs_go_on = False
current = randint(1, 6) + randint(1, 6)
print('玩家摇出了%d点' % current)
if current == 7:
print('庄家胜')
money -= debt
elif current == first:
print('玩家胜')
money += debt
else:
needs_go_on = True
print('你破产了, 游戏结束!')
OK!简单的Day01~05就这样结束了,其中确实有很多可以详细说说的地方,但是没必要完全搬运过来,有需要详细讲解的需求可以直接跳转原项目即可。