day04

回顾

1.运算符
数学运算符、比较运算符(<, >, ==, !=, >=, <=)、逻辑运算符(and、or、not)、赋值运算符

print(2**3)
print(2**(1/2))


print(0<10<100)

运算顺序

2.数字类型
int, float, bool, complex
2e4
1.23e3

tpye(数据),isinstance(数据,类型),类型名(数据)
input('请输入:') #字符串

3.分支结构:if
'''
if 条件语句:
语句块

if 条件语句:
语句块1
else:
语句块2

if 条件语句1:
语句块1
elif 条件语句2:
语句块2
elif 条件语句3:
语句块3
else:
语句块4
'''

1.for循环

a.语法
'''
for 变量名 in 序列:
循环体
'''
b.说明
'''
for - 关键字,固定写法
变量名 - 和声明变量的时候要求一样
in - 关键字,固定写法
序列 - python中的序列有:字符串、列表、元祖、字典、集合、range、生成器和迭代器等
: - 固定写法
循环体 - 和for保持一个缩进的一条或者多条语句

'''
c.执行过程
当程序执行到for循环的时候:让变量去序列当中取值,一个一个取,取完为止;每取一个值,执行一次循环体。
'''
a='a' print(a) print('=====')
a='b' print(b) print('=====')
a='c' print(c) print('=====')
. 'd' .
. 'e' .
. 'f' .
'''

for a in 'abcdef':
    print(a,id(a))
    print('=====')

2.range函数
range(N) - N是正整数,产生 0 ~ N-1 的所有整数

for num in range(100):
    print(num)

range(M,N) - M,N都是整数,并且 N>M ,产生 M ~ N-1 的所有整数

for num in range(100,1000):
    print(num)

range(M,N,S) - M,N,S都是整数,产生 M~N-1,每次隔S来产生下一个数

for num in range(0,101,2):
    print(num)

注意: xrange是python2.x的语法,在python3.x中无效

练习:计算1+2+3+...+100的和

n = 0
for num in range(1,101):
    n=n+num
print(n)
'''
n = 0
num = (1,2,3,4...)
num = 1  n = n + num, n = 0 + 1
num = 2  n = n + num, n = 1 + 2
num = 3  n = n + num, n = 1 + 2 + 3
num = 4  n = n + num, n = 1 + 2 + 3 + 4
.
.
.
print(n)
'''

练习: 计算 246*8...20的结果

product = 1
for num in range(2,21,2):
    product = product * num
print(product)

练习:计算0~100中所有能够被3或者5整除的和

sum1 = 0
for num in range(0,101):
    if (num % 3 == 0) or (num % 5 == 0):
        sum1 = sum1 + num
print(sum1)
        

1.while循环

a.语法
'''
while 条件语句:
循环体
'''
b.说明:
'''
while - 关键字,固定写法
条件语句 - 可以是数据、变量、运算表达式等。不能是赋值运算
: - 固定写法
循环体 - 和while保持一个缩进的一条或多条语句(会被重复执行)
'''
c.执行过程:
'''
先判断条件语句是否为True,为True就执行一次循环体,
执行完循环体再在判断条件语句是否为True,为True又执行一次循环体,
执行完循环体再在判断条件语句是否为True,为True又执行一次循环体,
以此类推,直到判断条件语句的结果为False,整个循环体直接结束。

两个极端:1.当条件语句永远为True,会造成死循环的现象
2.一开始条件语句的结果就是False,循环一次都不会执行
'''
练习:用while循环控制程序打印10行“=====”

count = 0
while count < 10:
    
    print('=====')
    count += 1

'''
count = 0
判断count < 10, 0 < 10 True print('=====')
count = count + 1 = 1
判断count < 10, 1 < 10 True print('=====')
count = count + 1 = 2
判断count < 10, 2 < 10 True print('=====')
count = count + 1 = 3
判断count < 10, 3 < 10 True print('=====')
.
.
.
count = count + 1 = 10
判断count < 10, 10 !< 10 false 退出
'''

练习1:使用while循环打印0-10
练习2:使用while循环打印11-20
练习3:使用while循环打印2,4,6,8,10...40

1.
num = 0
while num < 11:
    
    print(num)
    num += 1
#2.
num = 11
while num < 21:
    print(num)
    num += 1
#3.
num = 2
while num < 41:

    print(num)
    num += 2
#练习4:求2+4+6+...+40
sum1 = 0
num = 2
while num <= 40:
    #print('练习3:',num)
    sum1 += num
    num += 2
print(sum1)

练习:不断输入,直到输入的值是100为止
'''
请输入数字:10
请输入数字:1
请输入数字:100
结束!
'''

num = int(input('请输入数字:'))
while  num != 100:
    num = int(input('请输入数字:'))
print('结束!')

2.补充:随机数
导入random模块,random是python内置的一个专门用来产生和处理随机数的模块
rangint(M,N) - 产生M-N的随机数,要求M,N都是整数,并且N>M

import random
random_num = random.randint(0,100)
print('随机数:',random_num)

练习:猜数字游戏
随机数:70
产生一个0-100的随机,然后不断输入数字,直到输入的数字和产生的随机数一致为止。
如果输入的数字和随机数不相等,给出偏大或者偏小的提示
增加功能:统计玩家才对数字猜了多少次,然后根据次数范围给出相应的评价

print('==============游戏开始===============')
import random
random_num = random.randint(0,100)
time = 0
n = int(input('请输入数字0-100:'))
while n != random_num:
    if n < random_num:
        print('偏小')
    elif n > random_num:
        print('偏大')
    n = int(input('请输入数字:'))
    time += 1
print('恭喜正确!',random_num)
if time < 5:
    print('神童!',time,'次')
elif 5 < time < 10:
    print('智商达标!',time,'次')
elif time > 10:
    print("你智商太低,请充值!",time,'次')

3.for循环和while循环的选择
a.遍历(一个一个的取)序列元素用for循环
b.循环次数确定的时候用for循环
c.死循环和循环次数不确定的时候用while循环

1.continue

1.continue是关键字,只能出现在循环体中
功能:执行循环体的时候,如果遇到continue,就直接结束当次循环,直接进入下次循环的判断

for x in range(10):
    if x % 3 ==0:
        continue
    print(x)
    print('=====')

2.break
用法:break是关键字,只能出现在循环体中
功能:执行循环体的时候,如果遇到break,整个循环直接结束
练习:从0+1+2+......+n,求到和超过1000000,求出这个数

sum = 0
n = 1
while sum < 1000000:
    n += 1
    sum += n

print(sum)
#==================================用break
sum = 0
n = 1
while True:
    n += 1
    sum += n
    if sum > 1000000:
        break

print(sum-n,sum,n)

3.else
a.语法:
"""
for 变量 in 序列:
循环体
else:
语句块

while 条件语句:
循环体
else:
语句块
"""
执行过程:如果循环自然死亡,else对应的语句块会执行;如果循环因为遇到break而结束,else对应的语句块不执行

for x in range(5):
    print(x)
else:
    print('循环结束')
#============================================
for x in range(5):
    print(x)
    break
else:
    print('循环结束,没有遇到break')

循环嵌套

循环嵌套:在循环体中又有循环结构
执行过程:外循环执行一次,内循环执行完

for x in range(5):
    for y in range(4):
        print(x)
        print(y)
        #if (x == 1):
        break
'''
x = (0,1,2,3,4)
    y = (0,1,2,3)
x = 0     y = 0
x = 0     y = 1
x = 0     y = 2
x = 0     y = 3
x = 1     y = 0
x = 1     y = 1
x = 1     y = 2
x = 1     y = 3
.
.
.
'''

作业

基础
读程序,总结程序的功能:

numbers=1    
for i in range(0,20): 
    numbers*=2 
print(numbers) 

'''
numbers = 1   numbers = 1 * 2 = 2
numbers = 2   numbers = 2 * 2 = 4
numbers = 4   numbers = 4 * 2 = 8
numbers = 8   numbers = 8 * 2 = 16
...
numbers = 2**19 * 2 = 2**20
算2的20次方
'''
summation = 0
num = 1
while num <= 100:
    if (num % 3 == 0 or num % 7 == 0) and num % 21 != 0:
        summation += 1
    num += 1
print(summation)
'''
计算1到100之间能被3或7整除,但是不能被21整除的数的个数
'''

编程实现(for和while各写⼀遍):

  1. 求1到100之间所有数的和、平均值
#for
sum1 = 0
mean = 0
for n in range(1,101):
    sum1 += n
else:
    mean = sum1 / 100
print(sum1,mean)

#while
sum1 = 0
n = 1
mean = 0 
while n < 101:
    sum1 += n
    n += 1
else:
    mean += sum1 / 100
print(sum1,mean)
  1. 计算1-100之间能3整除的数的和
#for
sum1 = 0
for n in range(1,101):
    if n % 3 == 0:
        sum1 += n
print(sum1)
#while
sum1 = 0
n = 1
while n < 101:
    if n % 3 == 0:
        sum1 += n
    n += 1
print(sum1)
  1. 计算1-100之间不能被7整除的数的和
#for
sum1 = 0
for n in range(1,101):
    if n % 7 != 0:
        sum1 += n
print(sum1)
#while
sum1 = 0
n = 1
while n < 101:
    if n % 7 != 0:
        sum1 += n
    n += 1
print(sum1)

稍微困难

  1. 求斐波那契数列中第n个数的值:1,1,2,3,5,8,13,21,32.
n = int(input('请输入:'))
n1 = 0   #n1 + n2 = current
n2 = 1
current = 1
for x in range(2,n): #当前是第几个数
    #根据前两个数的值,计算出当前值
    current = n1 + n2
    #挪一次,为了下一次循环的时候求下一个值
    n1 = n2
    n2 = current
print(current)

    

2.判断101-200之间有多少个素数,并输出所有素数。判断素数的⽅法:
⽤⼀个数分别除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数

count = 0
for i in range(101,201):
    
    for j in range(2,i-1):
        if i % j == 0:

            print(i,'不是素数') 
            break
    else:
        count += 1
        print(i,'素数')
prin('有',count,'个')
#========方法二
for num in range(101,201):
    isprime = True #取一个数就假设这个数是素数
    for x in range(2,num):
        if num % x ==0:
            isprime = False #当在2~num-1中找到了一个能够被num整除的数,就说明假设不成立
            break
    #循环结束再判断之前的假设是否成立       
    if isprime == True:
        print(num,'素数')     
 

  1. 打印出所有的⽔仙花数,所谓⽔仙花数是指⼀个三位数,
    其各位数字⼀个⽔仙花数,因为153 = 1^3 + 5^3 + 3^3
for n in range(100,1000):

    hundred = n // 100
    ten = (n % 100) // 10
    units = (n % 100) % 10
    if n == hundred**3 + ten**3 + units**3:
        print(n)
  1. 有⼀分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的第20 分⼦:
    上⼀个分数的分⼦加分⺟ 分⺟: 上⼀个分数的分⼦ fz = 2 fm
fen_zi = 1
fen_mu = 1
for x in range(1, 20+1):
    #temp = fen_zi
    #fen_zi = fen_mu + fen_zi
    #fen_mu = temp
    fen_zi, fen_mu = fen_mu + fen_zi, fen_zi
print(fen_zi, "/", fen_mu)
#===================补充=============================
# python中交换两个数
a = 10
b = 20
a, b = b, a
print(a,b)
  1. 给⼀个正整数要求:1、求它是⼏位数 2.逆序打印出各位数字
n = int(input('输入一个正整数:'))
i = 0

while True:
    if n // 10 < 1:
        print('个位数')
        print(n)
        break
    i += 1
    if n // (10**i) < 10:
        print(i+1,'位数')
        b = 1
        while i >= 0:
            
            a = n % 10**b
            n -= a
            b += 1
     
            i -= 1

            print(a // 10**(b-2))

            
        break
#########################################
num = int(input('输入一个正整数:'))
num2 = num
length = 0
while True:
    num //= 10
    length += 1
    if num == 0:
        break
print(length)
for _ in range(length):
    print(num2 % 10,end='')
    num2 //= 10
print()
#====补充:print定制+++++++++
# print可以在需要输出的内容的最后,添加end和sep来定制一个print打印完成后默认输出的内容,
# 和一个print打印多个内容的时候多个内容之间的间隔
#end:不换行接着打印 
print(1111, end='')
print(2222, end='+')
print(3333, end='%')
print()#如果想不接着打印,就用print()隔开
print(12, 23, 22, sep='+') 
print('aaa','bbb',end='====',sep='----')  
print()    

你可能感兴趣的:(day04)