第二次作业

Demo16
随机产生一个两位数数字,然后用户输入一个两位数数字,并根据以下规则判定用户赢得的奖金是多少
1 )输入的数字和随机产生的数字完全相同(包括顺序),奖金为 10000
2 )输入的数字和随机产生的数字相同(不包括顺序),奖金为 3000
3 )输入的数字和随机产生的数字有一位数相同,奖金为 1000 美元
4 )输入的数字和随机产生的数字都不相同,没有奖金, 0
"""
数据 : 随机产生的数字 randNum 用户输入的数字 userNum r1 r2 u1 u2
randNum = r1 * 10 + r2
userNum = u1 * 10 + u2
步骤 :
1. 输入
2. 拆数字
3. 判断
(1) randNum == userNum
(2) r1 == u2 and r2 == u1
(3) r1 == u1 or r1 == u2 or r2 == u1 or r2 == u2
(4) 啥也没有
4. 输出对应的结果
"""
import random
randNum = random . randint ( 10 , 99 )
userNum = eval ( input ())
r1 = randNum // 10
r2 = randNum % 10
u1 = userNum // 10
u2 = userNum % 10
if randNum == userNum :
print ( 10000 )
elif r1 == u2 and r2 == u1 :
print ( 5000 )
elif r1 == u1 or r1 == u2 or r2 == u1 or r2 == u2 :
print ( 3000 )
else :
print ( 0 )
Demo17
"""
数据 :a b c delt x1 x2
步骤 :
1. 输入 a b c
2. 计算 delt = b^2 - 4ac
3.delt 判断
(1)> 0
(2)== 0
(3)< 0
4. 根据不同结果输出
"""
a , b , c = eval ( input ())
delt = b ** 2 - 4 * a * c
if delt > 0 :
x1 = ( - b + delt ** 0.5 ) / ( 2 * a )
x2 = ( - b - delt ** 0.5 ) / ( 2 * a )
print ( x1 )
print ( x2 )
elif delt == 0 :
x = - b / ( 2 * a )
print ( x )
else :
print ( " 无实数解 " )
1.11 循环语句
主要解决什么样的问题:具有重复性、规律性的问题
向前走 10 步:有明显的循环次数的 - for
向前走,直到碰墙为止:没有明显的循环次数的,但是有结束条件 - while
循环四要素:
循环的开始(从第 1 步开始;从第 1 步开始 / 从起点开始)
循环的继续条件(还没走到第 10 步;没有碰到墙 / 就是看距离)
循环体(走的每一步;走的每一步)
循环的步长 / 间隔 / 周期 / 进度(步数的统计;距离的统计)
if delt > 0 :
x1 = ( - b + delt ** 0.5 ) / ( 2 * a )
x2 = ( - b - delt ** 0.5 ) / ( 2 * a )
print ( x1 )
print ( x2 )
elif delt == 0 :
x = - b / ( 2 * a )
print ( x )
else :
print ( " 无实数解 " )
// 打印 1 ~ 100
for ( int i = 1 ; i < = 100 ; i ++ ) {
System . out . println ( i );
}
-> -> -> -> -> -> -> -> -> -> 不满足为止
int i = 1 ;
for (; i < = 100 ;) {
System . out . println ( i );
i ++ ;
}
== >
int i = 1 ;
while ( i < = 100 ) {
System . out . println ( i );
i ++ ;
}
Python
for i in range ( 11 ):
print ( i )
"""
range(n) : 取值范围是 [0,n) 步长默认为 1
0 1 2 3 4 5 6 7 8 9 10
i
循环的开始: 0
循环的继续条件: i < n
循环体: print(i)
循环的步长 : 步长默认为 1
"""
for i in range ( 2 , 10 ):
print ( i )
"""
range(a, b): 取值范围 [a, b) 步长默认 1
"""
for i in range ( 2 , 13 , 2 ):
print ( i )
"""
range(a, b, c): 取值范围 [a, b) 步长默认 2
"""
print ( "=" * 12 )
for i in range ( 100 , 1 ):
print ( i )
for i in range ( 100 , 10 , - 10 ):
print ( i )
"""
range(a,b,c)
如果 c > 0, a < b 才是有效范围 递增
如果 c < 0, a > b 才是有效范围 递减
"""
# 特殊的 结合序列去使用 遍历序列中每一个元素
for i in "abcdefg" :
print ( i )
"""
******
******
******
******
******
"""
for i in range ( 5 ):
print ( "******" )
print ( "=" * 10 )
for i in range ( 5 ):
for j in range ( 6 ):
print ( "*" , end = "" )
print ()
print ( "=" * 10 )
"""
*
**
***
****
*****
******
"""
for n in range ( 6 ):
for i in range ( n ):
print ( "*" , end = "" )
print ()
循环语句编程练习
Demo27
利用循环,寻找规律,打印如下数字模式:
模式 A
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
模式 B
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
模式 C
1
2 1
3 2 1
4 3 2 1
5 4 3 2 1
6 5 4 3 2 1
模式 D
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
print ( " 模式 A" )
for n in range ( 1 , 7 ):
for i in range ( 1 , n + 1 ):
print ( i , end = " " )
print ()
print ( " 模式 B" )
for n in range ( 1 , 7 ):
for i in range ( 1 , 8 - n ):
print ( i , end = " " )
print ()
for n in range ( 6 , 0 , - 1 ):
for i in range ( 1 , n + 1 ):
print ( i , end = " " )
print ()
print ( " 模式 C" )
for n in range ( 1 , 7 ):
for k in range ( 6 - n ):
print ( " " , end = " " )
for i in range ( n , 0 , - 1 ):
print ( i , end = " " )
print ()
print ( " 模式 D" )
for n in range ( 6 , 0 , - 1 ):
for k in range ( 6 - n ):
print ( " " , end = " " )
for i in range ( 1 , n + 1 ):
print ( i , end = " " )
print ()
Demo28
利用循环,寻找规律,打印如下数字模式:
                  1
               2 1 2
            3 2 1 2 3
         4 3 2 1 2 3 4
      5 4 3 2 1 2 3 4 5
   6 5 4 3 2 1 2 3 4 5 6
7 6 5 4 3 2 1 2 3 4 5 6 7
for n in range ( 1 , 8 ):
for k in range ( 7 - n ):
print ( " " , end = " " )
for x in range ( 1 - n , n ):
print ( abs ( x ) + 1 , end = " " )
print ()
Demo29
利用循环,寻找规律,打印如下数字
for n in range ( 1 , 8 ):
for k in range ( 7 - n ):
print ( " " , end = " " )
for x in range ( 1 - n , n ):
num = 2 ** ( n - 1 - abs ( x ))
print ( "%2d" % ( num ), end = " " )
print ()
Demo30
如下所示,是一个高度为 9 的菱形
# n = 9
"""
n = eval(input())
23 / 31 m = n // 2
for i in range(-m, m + 1):
for k in range(abs(i)):
print(" ", end = "")
for j in range(m + 1 - abs(i)):
print("*", end = " ")
print()
"""
"""
i j k
* 1 1 4
* * 2 1 2 3
* * * 3 1 2 3 2
* * * * 4 1 2 3 4 1
* * * * * 5 1 2 3 4 5 0
* * * * 6 1 2 3 4 1
* * * 7 1 2 3 2
* * 8 1 2 3
* 9 1 4
j <= i and i + j <= 10
"""
n = eval ( input ())
for i in range ( 1 , n + 1 ):
for k in range ( abs ( n // 2 + 1 - i )):
print ( " " , end = "" )
for j in range ( 1 , i + 1 ):
if j < = i and i + j < = n + 1 :
print ( "*" , end = " " )
print ()
Demo31
如下所示,是一个高度为 9 的菱形
     
"""
i j k
* 1 1 4
* * 2 1 2 3
* * * 3 1 2 3 2
* * * * 4 1 2 3 4 1
* * * * * 5 1 2 3 4 5 0
* * * * 6 1 2 3 4 1
* * * 7 1 2 3 2
* * 8 1 2 3
* 9 1 4
j <= i and i + j <= 10
j == 1 or j == i or i + j == 10
"""
n = eval ( input ())
for i in range ( 1 , n + 1 ):
for k in range ( abs ( n // 2 + 1 - i )):
print ( " " , end = "" )
for j in range ( 1 , i + 1 ):
if j < = i and i + j < = n + 1 :
if j == 1 or j == i or j + i == n + 1 :
print ( "*" , end = " " )
24 / 31 else :
print ( " " , end = " " )
print ()
Demo34
题目描述
输入两个正整数,计算其最大公约数,例如 4 2 的最大公约数是 2 16 24 的最大公约数是 8
输入输出描述
输入两个数字
输出最大公约数
num1 , num2 = eval ( input ())
min_num = min ( num1 , num2 )
for num in range ( min_num , 0 , - 1 ):
if num1 % num == 0 and num2 % num == 0 :
print ( num )
break
Demo35
一个大于 1 的整数如果只能被正整数 1 和它本身整除,则它就是素数,例如 2 3 5 7 都是素数,而 4
6 8 9 则不是
num = eval ( input ())
# 哨兵:监控状态变化
flag = True # 默认是素数
for n in range ( 2 , num // 2 + 1 ):
if num % n == 0 :
flag = False
break
if flag :
print ( "YES" )
else :
print ( "No" )
Demo37
输入一个正整数,然后找出它所有的最小因子,也称之为素因子
num = eval ( input ())
while num ! = 1 : # 120 60 30 15 5
for n in range ( 2 , num + 1 ):
if num % n == 0 :
print ( n , end = " " )
num = num // n
break
# 2 2 2 3
# O(N * logN)
Demo33
计算机随机生成一个 [0,100] 之间的整数,程序提示用户连续地输入数字直到它与那个随机生成的数字相
对于用户输入的数字,程序会提示它是过高还是过低
import random
randNum = random . randint ( 0 , 100 )
"""
usrNum = eval(input())
while randNum != usrNum:
if usrNum < randNum:
print(" 小了 ")
elif usrNum > randNum:
print(" 大了 ")
usrNum = eval(input())
print(" 猜对了 ")
25 / 31 """
while True :
usrNum = eval ( input ())
if usrNum < randNum :
print ( " 小了 " )
elif usrNum > randNum :
print ( " 大了 " )
else :
print ( " 猜对了 " )
break
Demo39
打印前 50 个素数,每打印 10 个素数换行
num = 2
count = 0
while count ! = 50 :
flag = True
for n in range ( 2 , num // 2 + 1 ):
if num % n == 0 :
flag = False
break
# 是素数怎么去处理
if flag :
print ( num , end = "\t" )
count += 1
if count % 10 == 0 :
print ()
num += 1
Demo50
输入一个十进制正整数,输出其十六进制形式
"""
9 ÷ 2 = 4 ~ 1
4 ÷ 2 = 2 ~ 0
2 ÷ 2 = 1 ~ 0
1 ÷ 2 = 0 ~ 1
1001 = 9
123321 ÷ 16 = 7707 ~ 9
7707 ÷ 16 = 481 ~ 11
481 ÷ 16 = 30 ~ 1
30 ÷ 16 = 1 ~ 14 E
1 ÷ 16 = 0 ~ 1
1E1B9
"""
num = eval ( input ())
s = ""
while num ! = 0 :
y = num % 16
if y > = 10 :
y = chr ( ord ( 'A' ) + y - 10 )
s = str ( y ) + s
num = num // 16
Demo47
1.12 数组列表
序列:存储一堆数据的集合 / 容器
列表、字符串、元组、集合、字典
序列通用操作
索引 / 角标
切片 就是获取序列中某一个连续子区间
print ( s )
n = eval ( input ())
if n == 1 or n == 2 :
print ( n )
else : # n = 5
a = 1
b = 2
c = 0
for i in range ( 3 , n + 1 ):
c = a + b
a = b
b = c
print ( c )
a , n = eval ( input ())
sum = 0
num = 0
for i in range ( n ):
num = num * 10 + a # 2 22 222
sum += num
print ( sum )
>>> arr = [1,2,3,4,5,6,7,8,9]
>>> arr[0]
1
>>> arr[8]
9
>>> arr[-1] # 倒数第 1
9
>>> arr[-2] # 倒数第 2
8
>>> arr[-100]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> arr[100]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
27 / 31 序列名 [a : b : c] range(a, b, c) 基本类似
>>> arr[2:] # 从角标 2 开始向尾遍历 步长为 1
[3, 4, 5, 6, 7, 8, 9]
>>> arr[2::2] # 从角标 2 开始向尾遍历 步长为 2
[3, 5, 7, 9]
>>> arr[:6] # 从头开始到角标 6( 不取 ) 步长为 1
[1, 2, 3, 4, 5, 6]
>>> arr[:6:3] # 从头开始到角标 6( 不取 ) 步长为 3
[1, 4]
>>> arr[:] # 从头到尾
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> arr[::]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> arr[::2]
[1, 3, 5, 7, 9]
======================================= 特殊的
>>> arr[-1:-7] # 从尾到头 步长必须负数
[]
>>> arr[-1:-7:-1]
[9, 8, 7, 6, 5, 4]
>>> arr[-9:7] # 从头到尾 步长为正数
[1, 2, 3, 4, 5, 6, 7]
>>> arr[0:7]
[1, 2, 3, 4, 5, 6, 7]
>>> arr[-9:-2] # 从头到尾 步长为正数
[1, 2, 3, 4, 5, 6, 7]
连接和重复 + *
成员资格
>>> 1 in arr
True
>>> 10 in arr
False
长度与最值
>>> len(arr) # 获取序列的长度
9
>>> len(arr)
9
>>> max(arr)
9
>>> min(arr)
1
>>> s = "ABC"
>>> len(s)
3
>>> max(s)
'C'
>>> min(s)
'A'
常见操作
创建问题
"""
列表
1. 存储多个数据 数据不一定都是同一个类型 但是为了方便操作 建议存一样的类型
2. 可以通过索引 / 角标来访问元素
3. 可变长的数组 我们后续可以在列表中进行 增 删
4. 用一对中括号 []
"""
# 创建一个空的列表
arr = []
print ( arr )
# 创建一个具有若干元素的列表
arr = [ 1 , 2 , 3 , 4 ]
print ( arr )
# 创建一个具有长度但是没有值的列表
arr = [ None ] * 5
print ( arr )
# 通过【列表推导式 / 解析式】来进行创建
# [ 目标值表达式 for 目标值 in 迭代对象 if ....]
# 创建 1~100 当中 能够被 3 整除 且 能够被 5 整除 的所有数字
"""
for x in range(1, 101):
if x % 3 == 0 and x % 5 == 0:
print(x)
"""
arr = [ x for x in range ( 1 , 101 ) if x % 3 == 0 and x % 5 == 0 ]
print ( arr )
# 创建 1~100 当中 偶数
arr = [ x for x in range ( 1 , 101 ) if x % 2 == 0 ]
print ( arr )
# 水仙花数
for num in range ( 100 , 1000 ):
a = num % 10
b = num // 10 % 10
c = num // 100
if a ** 3 + b ** 3 + c ** 3 == num :
print ( num )
arr = [ num for num in range ( 100 , 1000 ) if ( num % 10 ) ** 3 + ( num // 10 % 10 ) **
3 + ( num // 100 ) ** 3 == num ]
print ( arr )
arr = [ x * 3 + " 哈哈 " for x in "ABCDEFG" ]
print ( arr )
# 通过输入来获取元素
"""
5
"1" "2" "3" "4" "5"
"""
n = eval ( input ())
arr = input (). split ( " " ) # 将输入的数据以空格分割 分割的结果就是列表
print ( arr )
arr = [ int ( x ) for x in arr ]
print ( arr )
遍历问题
arr = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]
# 通过角标遍历
for i in range ( len ( arr )):
print ( arr [ i ])
# 通过 foreach 遍历
for num in arr :
print ( num )
最值问题
arr = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]
# 最大值
maxNum = arr [ 0 ]
minNum = arr [ 0 ]
for i in range ( 1 , len ( arr )):
if arr [ i ] > maxNum :
maxNum = arr [ i ]
if arr [ i ] < minNum :
minNum = arr [ i ]
print ( maxNum )
print ( minNum )
存在性问题
arr = [ 1 , 2 , 3 , 4 , 5 , 4 , 6 , 4 , 7 , 8 , 9 ]
# 元素是否存在
key = 10
for num in arr :
if num == key :
print ( " 存在 " )
break
else :
print ( " 不存在 " )
# 元素在哪个位置 从左到右第 1 次出现的角标 不存在返回 -1
key = - 4
index = 0
for i in range ( len ( arr )):
if arr [ i ] == key :
index = i
break
else :
index = - 1
print ( index )
翻转问题
arr = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]
# 0 1 2 3 4 5 6 7 8
arr = arr [ - 1 :: - 1 ]
print ( arr )
for i in range ( 0 , len ( arr ) // 2 ):
j = len ( arr ) - 1 - i
arr [ i ], arr [ j ] = arr [ j ], arr [ i ]
print ( arr )
30 / 31 left = 0
right = len ( arr ) - 1
while left < = right :
arr [ left ], arr [ right ] = arr [ right ], arr [ left ]
left += 1
right -= 1
print ( arr )
排序算法
选择排序
冒泡排序
插入排序
查找算法
二分查找:要求数据必须有序
arr = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]
minIndex = 0
maxIndex = len ( arr ) - 1
midIndex = ( minIndex + maxIndex ) // 2
key = 8
while arr [ midIndex ] ! = key :
if arr [ midIndex ] < key :
minIndex = midIndex + 1
else :
maxIndex = midIndex - 1
if minIndex > maxIndex :
midIndex = - 1
break
midIndex = ( minIndex + maxIndex ) // 2
print ( midIndex )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值