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
)