新大榭论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

《新大榭》- 创大榭地方网络社区先锋品牌 新大榭始终专注于地方网络社区平台的建设 关于我们- [大记事]- 留言建议- [新手报道]

发布 .新大榭软件管家(Excel版) V5.9版 财务/仓库/生产/销售/采购/行政/人事/校园 .公告 - 客户 - 打赏 - 职场 - Excel - Python.

新大榭镜像-音乐-法律-图书-高中课堂-实验 广告是为了能更好的发展 [欢迎商家支持本站互利共赢] 广告位招租.首页黄金广告位等您来!联系 13566035181

查看: 630|回复: 1

[微课] 7412 - 新大榭微课№:002 - 【案例】查找女神手机号(公开课)

 关闭 [复制链接]
发表于 2021-7-14 17:13:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!

您需要 登录 才可以下载或查看,没有账号?注册

x
上一讲,我们详细介绍了古代经典的《百钱百鸡》问题,还没听懂的请返回【传送门% j* l3 \, G3 F7 |) l8 j" {3 c7 T+ A

5 d! M( q+ h  Z3 Z  m任何能帮助新大榭社区的建议,欢迎同学们在下方积极留言~
" r2 k: N; m! B
- f8 X7 [# r3 f' M( o好啦,废话不多说,进入今天的主题,查找女神手机号
% _+ s* |0 s1 H, F; x. `, w1 _% n3 Z. y& x
先有请今天的主人公:新大榭阁下~
: T$ w' {. V( H) j: x: l% k+ W* O/ \* u" A+ L/ g" i
他一直暗恋同是计科专业的同班女神,无数次悉心热情的帮女神修改代码。
, {# o0 B! }, E0 K5 E, O* _(教学需要剧情,请不要深究哈)
5 O  k6 @) `, \( K4 k% M" V% C4 }# M7 s* y" T
有一天,女神又来找新大榭调测程序,二话没说,放下电脑就走了。
- N% i, w+ z* ]" H( f0 _4 S
, L$ W. v' O( m) E" L% `新大榭小哥哥看到代码编辑器上写了一段注释:
! r) h) u0 p2 Z" t3 J
  1. '''& N" Z6 S/ r& t& W2 Q8 P, z
  2. 想和我出去约会吗?8 u; k- {3 ^9 E9 k
  3. # V: g6 M, ]" I% ^: D8 s
  4. 请根据以下线索找出我手机号 1709098xxxx 的后 4 位,并在今晚 21:00 前短信告诉我集合地方~+ d. C  h" B; N. s# g
  5. 8 R0 ~& d) J: X( H9 t
  6. ##前两位数字相同
    ; n1 ?7 z7 Q! B+ l
  7. ##后两位数字相同,但与前两位不同
    1 d6 q) \' J% @" ~. k# J6 Z" o
  8. ## 4 位数字刚好是一个整数的平方
复制代码
看到这里,新大榭小哥哥心头小鹿乱撞!1 p* f  r) K- V5 n1 H6 j2 ~- o. \

: P  g# T. Y$ V+ q' l想到女神那甜蜜的微笑,仿佛一股清凉的泉水从他心中流过...
6 D& E7 e; n; Z" {. ^: ~3 {/ g% j- O4 P2 Z) C
喜悦和躁动涌进了他的心中,心仿佛荡漾在春水里。
& Z3 k; O# E. ?. j: T- I* {
% n, r. J2 B( i% U4 [* f7 ^& e, Z那颗心乐得快要盛不下蜜糖般的喜悦!!!- M1 _0 A3 p$ i2 o/ T
  ?3 N/ k5 ]3 F  s
一看手表,还有 20min,既然如此,只能来撸代码了!
+ [) y- _$ W* H
4 D: B+ P% r4 X0 y, V按照女神的要求,其实就是找到一个前两位数相同、后两位数相同且相互间又不同的4位整数。8 M" E  D" f5 ?" X7 D
9 g* U6 p" ]' u" Y, v- g. B$ _" \
然后判断该整数是否是另一个整数的平方!
& n  \3 L, H7 G: s8 x. |5 h; C9 i  y( q( B
即求一个 4 位数 abcd,满足下面的条件( abcd 均属于[0,9]):

* `  U0 N: b& \6 ]
, g, n* w) k% y' h! [2 m; s3 Y. p/ G 7412_01.jpg ( r* p; Q; V$ V5 D% D
9 B( [" p# g8 H; _! J" |" ?
其中由注释可知,abcd,又各自相等。, m* X/ r1 m% [' x8 v8 V
6 H+ r) Z( D4 G7 U/ x. c) {
公示有了,最简单粗暴方式还是用 穷举法,一个一个试,答案很快就会浮出水面!
/ W' s" ^% c" P6 o$ \: p9 s0 q新大榭此时心中想起一句名言:
, t# Z2 y- v& @7 ?/ V2 V0 q
做好流程图,程序立刻出~
首先设计双层循环穷举出所有由前两位数和后两位数组成的四位数。" |0 C1 u9 v' y# `& m- h

/ H" y& s6 @. a; c# V9 p然后在最内层穷举出所有平方后结果为四位的数,最后判断该数是否符合总条件,符合则打印答案。, \! _6 C& }- Z  [$ y! O
" x) L0 o& M! @( p0 m
流程图参上
(点击看大图); h. P8 ?( N5 P4 z! [1 c

% e% Z4 n& \& |+ Q+ e6 J 7412_02.jpg 3 O+ R# G2 m2 }4 q5 [
& J8 f) R/ |; `% \/ y& P9 S
写流程图时新大榭发现找整数时,不一定从1开始,因为女神手机号只能是四位!8 U$ N! m3 t$ v2 ]
2 f- O/ D1 t( y- H
00xx,这样根本无法满足条件。
( ^8 x5 Z" I- u/ W& ~( g  B3 x. d, N# Q2 `/ f
既然如此是四位数,那么它的平方根只能是从 3499 之间!(为什么?) }4 B9 n8 a6 @# R8 b4 {( C7 U

7 R7 j5 b4 V6 b; ~. \' o: ^! v如果用上一讲的 while 循环来写,代码就是:
: Z7 F( f" p0 y! w8 P
  1. i = 1
    " g4 F) W6 l& _2 m, `, w; j
  2. while i <= 9:* u+ n* A$ r% z1 Y/ I2 P: J( Z& U
  3.     j = 06 J/ Y1 L1 |5 f$ A/ i8 M4 _
  4.     while j <= 9:/ o% k. O: }- \: `# F
  5.         if(i != j):/ J  o4 e$ d$ i( i7 H# i
  6.             k = 1000*i+100*i+10*j+j
    - B, U& d8 }5 s1 ~8 i% ?( M4 S' k
  7.             t = 343 @/ e3 w: n. B  F1 b% M9 O
  8.             while t <= 99:
    ! o( Y" q1 ^( O8 C
  9.                 if(k == t*t):# B4 ~0 N5 H5 U! S# K' h
  10.                     print(k)
    + f3 J6 u* i) B+ E0 g
  11.                 t += 10 Y- k6 O* _; [9 c* s
  12.         j += 1
    3 {, P; P; g+ K2 Y3 u
  13.     i += 1
复制代码

* s. f0 I- N: T( X( `2 o& ywhile 循环我们都用了这么久,还可以用更省心的 for 循环噢!: j& S' v% Y4 F; l% G% V2 W2 h
' h" s1 S+ y% d8 Z4 S' K5 c
将上面的 while 条件以及 +1 条件,统一用 for () in range() 替换。' C+ s6 H$ F  K3 ?3 w9 w( y
" ?9 z. b: D& ]* q7 T, J0 j8 b
所以流程图中所有 while 都可以修改 ,并且最后的 for 循环条件就是 (34,100)

; H, _. D) y4 u7 N: ]* M
  1. for t in range(34, 100)
复制代码
代码分分钟搞定了,看下结果:
, H2 U2 Z2 {  Q  E  d' c+ X2 c& H
2 Y! @# S/ f( {5 Q: T9 r$ j. R$ k; D4 a0 E  b2 Z* f8 [& {- P1 F: p
1 \% F1 z, A; S1 C
抬手看表,刚刚 20:50,赶紧发短信:( D* l# F/ B5 m) a
) P/ m! i, ^4 u- O9 U
女神我们晚上去......

- W- ?9 y: K7 d哈哈哈,让我们祝新大榭小哥哥幸福吧~~( x$ T% N/ \: l5 p% i5 y1 m8 R. p
9 [5 S! b3 f: C# G& o
源代码(程序那么简单,先自己动手写!稍后老师附参考答案):
- k$ [$ Z+ x) K+ Y" }1 j
  1. '''( W0 V: \3 @( G! O
  2. Team: 新大榭
    / b) G. [& e, d
  3. Author: 张黎斌
    ) _; u) r7 h7 Y* Q2 x
  4. update: 2021-07-14
    9 w7 h) ^! [' _2 r: A& M9 h) k$ n
  5. Level: A' i- `0 r- d9 x) c" E& q$ ]
  6. ' ?4 K/ {- L" P8 Z5 \5 L
  7. 想和我出去约会吗?
    & U- t  d- T; t$ d6 x9 t
  8. 请根据以下线索找出我的手机号1709098XXXX 的后四位
    6 R' f: B* c6 P4 n: n
  9. ( }; g5 v7 C2 `6 U* _, P
  10. 线索1:前两位数字相同
    8 X) G' X1 q+ J. N9 \
  11. 线索2:后两位数字也相同,但与前两位不同7 [: @% u' K5 Y6 g3 o
  12. 线索3:这四位数刚好是一个整数的平方: `9 u0 i$ Y9 R/ T6 P
  13. '''
    # i+ h4 @4 w$ y6 @4 L) _1 D
  14. for i in range(10):  F; C# e0 s. f( Z! Y
  15.     for j in range(10):
    5 o" ]0 R* \- Y; K4 f( B6 o/ B
  16.         if i != j:% E) A6 j) m; l2 ]7 G7 E/ ^& v0 g2 G/ e
  17.             k = 1000*i + 100*i + 10*j + j/ Y+ l+ H  S( S% e3 T( {7 f
  18.             for temp in range(34,100):  # 为什么 34<=temp<100 #因为四位数范围为1100~9988& i; a9 {' ~* @- w, H4 D
  19.                 if temp*temp == k:/ ^* Y4 v3 E: ]- t" |& D
  20.                     print("女神的手机号后四位:",k)
复制代码
注:号码虚构,如有雷同,纯属巧合!

7412.zip

472 Bytes, 阅读权限: 5, 下载次数: 2, 下载积分: 财富 -1 点

新大榭Python学习社区培训、Excel业务指导、办公软件定制、网站建设;新大榭探索实验室欢迎您!http://lab.daxie.net.cn/
Q群推荐 大榭本地求职招聘QQ群,欢迎转发分享本地招聘信息资讯! 官方招聘1群(已满);官方招聘2群:315816937 *
 楼主| 发表于 2021-7-18 09:04:05 | 显示全部楼层
下面我们来看看新大榭网校学哥学姐的作业答案吧~ 例如:" Z7 I4 |: H$ z( E
  1. import math3 e! u+ \* B' p' s5 U" \
  2. . M. X' t9 U: I1 {- u2 z
  3. for x in range(1, 10):
    & N" F/ g3 g6 A* E  O& d
  4.     for y in range(10):6 p  o" s: c. J; H9 ^" n
  5.         if x != y:( s( M1 P( C2 {3 z3 B$ i; W
  6.             num = x * 1000 + x * 100 + y * 10 + y0 @2 Y8 w- @0 I( u% J
  7.             if math.sqrt(num) % 1 == 0:1 j! d" _+ ~; w1 c: h
  8.                 print(num)
复制代码
再如:! J/ K5 }# q+ H& l# B7 C* }/ o
  1. for x in range(10):. E! _7 O% z. R1 L6 A
  2.     for y in range(10):3 u. k! A  Z8 _- y: U) A
  3.         for z in range(32,100):8 a$ E, N' m# Z* [4 X& r, A
  4.             k = int(f'{x}{x}{y}{y}')
    , k  J" w& ~  K4 C; r1 o
  5.             if x != y and z * z == k:8 c; u+ h' j* W% h2 a& j
  6.                 print('号码后四位是', k)
复制代码
还有这样的:
* H( N/ h% q$ u
  1. for i in range(32,99):" X* [& U- U" K" ~  L2 V( w
  2.     num = pow(i,2)
    8 i& r0 r! D: T. D4 q, p# l
  3.     if num%10==int(num%100/10) and int(num/1000)==int(num/100)%10 and (num%10)!=int(num/1000):
    5 k( x! R- v0 e9 H7 [6 y; q/ d9 M
  4.         print(num)
复制代码
还有那样的:, P9 ^( T" v7 t0 i
  1. for i in range(1,10):
    / S! }' n2 [5 B- A# s$ p
  2.     for j in range(1,10):) Q1 F+ q) a! Q4 |, n  N7 i6 h  C
  3.         if i != j and pow(i*1000+i*100+j*10+j, 0.5)%1==0:
    4 Y; k* h% R7 }0 Z! Z, r' U
  4.             print(i,i,j,j)
复制代码
你更支持那位学哥学姐呢?欢迎评论区留言~ 下课....
:更多公益课程欢迎注册新大榭论坛在线学习!会员级别越高,福利越多!
新大榭Python学习社区培训、Excel业务指导、办公软件定制、网站建设;新大榭探索实验室欢迎您!http://lab.daxie.net.cn/
新大榭官方公益帮帮群:6603298 官方Excel学习交流群:82064486  欢迎您加入
您需要登录后才可以回帖 登录 | 注册

本版积分规则

文字版|小黑屋|新大榭 ( 浙ICP备16018253号-1 )|点击这里给站长发消息|

GMT+8, 2025-12-18 13:04 , Processed in 0.115117 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表