计算机二级练习仓库
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

975 linhas
66 KiB

  1. {
  2. "cells": [
  3. {
  4. "cell_type": "markdown",
  5. "metadata": {},
  6. "source": [
  7. "# 实践8 文本数据\n",
  8. "\n",
  9. "\n",
  10. "**学习目标**\n",
  11. "1. 熟练书写字符串数据的常量表示 \n",
  12. "2.能掌握简单的字符串操作和函数实现计算 \n",
  13. "3. 能掌握文本数据的典型问题的算法设计 \n",
  14. "\n"
  15. ]
  16. },
  17. {
  18. "cell_type": "markdown",
  19. "metadata": {},
  20. "source": [
  21. "## 1.字符串常量的表示 \n",
  22. "**理解字符串常量三种表示方式,和使用场合** \n",
  23. "**理解转义字符(\\n和\\t)和空格的作用**"
  24. ]
  25. },
  26. {
  27. "cell_type": "code",
  28. "execution_count": null,
  29. "metadata": {},
  30. "outputs": [],
  31. "source": [
  32. "print(\"To be or not to be, that's a question.\")"
  33. ]
  34. },
  35. {
  36. "cell_type": "code",
  37. "execution_count": null,
  38. "metadata": {},
  39. "outputs": [],
  40. "source": [
  41. "print('古云:\"临渊羡鱼,不如退而结网。\"')"
  42. ]
  43. },
  44. {
  45. "cell_type": "code",
  46. "execution_count": null,
  47. "metadata": {},
  48. "outputs": [],
  49. "source": [
  50. "print('''富贵必从勤苦得,\n",
  51. "男儿须读五车书。\n",
  52. "--杜甫''')"
  53. ]
  54. },
  55. {
  56. "cell_type": "code",
  57. "execution_count": null,
  58. "metadata": {},
  59. "outputs": [],
  60. "source": [
  61. "#换行符\\n\n",
  62. "print('富贵必从勤苦得,\\n男儿须读五车书。\\n--杜甫')"
  63. ]
  64. },
  65. {
  66. "cell_type": "code",
  67. "execution_count": null,
  68. "metadata": {},
  69. "outputs": [],
  70. "source": [
  71. "#空格和制表符\\t的区别\n",
  72. "from random import randint \n",
  73. "n=int(input(\"n=\"))\n",
  74. "for i in range(1,n+1):\n",
  75. " print(randint(0,10000),end=\" \") #使用空格间隔每一个数\n",
  76. " if i % 10 == 0:\n",
  77. " print()\n"
  78. ]
  79. },
  80. {
  81. "cell_type": "code",
  82. "execution_count": null,
  83. "metadata": {},
  84. "outputs": [],
  85. "source": [
  86. "n=int(input(\"n=\"))\n",
  87. "for i in range(1,n+1):\n",
  88. " print(randint(0,10000),end=\"\\t\") #使用制表符间隔每一个数\n",
  89. " if i % 10 == 0:\n",
  90. " print()"
  91. ]
  92. },
  93. {
  94. "cell_type": "code",
  95. "execution_count": 62,
  96. "metadata": {},
  97. "outputs": [
  98. {
  99. "name": "stdout",
  100. "output_type": "stream",
  101. "text": [
  102. "a 的编码是 97\n"
  103. ]
  104. }
  105. ],
  106. "source": [
  107. "txt = 'a'\n",
  108. "code = ord(txt)\n",
  109. "print (txt,'的编码是',code)\n"
  110. ]
  111. },
  112. {
  113. "cell_type": "code",
  114. "execution_count": 63,
  115. "metadata": {},
  116. "outputs": [
  117. {
  118. "name": "stdout",
  119. "output_type": "stream",
  120. "text": [
  121. "0 的编码是 48\n"
  122. ]
  123. }
  124. ],
  125. "source": [
  126. "txt = '0'\n",
  127. "code = ord(txt)\n",
  128. "print (txt,'的编码是',code)"
  129. ]
  130. },
  131. {
  132. "cell_type": "code",
  133. "execution_count": 66,
  134. "metadata": {},
  135. "outputs": [
  136. {
  137. "name": "stdout",
  138. "output_type": "stream",
  139. "text": [
  140. "101 对应的字符是 e\n"
  141. ]
  142. }
  143. ],
  144. "source": [
  145. "code = 101\n",
  146. "txt = chr(code)\n",
  147. "print(code,\"对应的字符是\",txt)\n"
  148. ]
  149. },
  150. {
  151. "cell_type": "markdown",
  152. "metadata": {},
  153. "source": [
  154. "### 2.字符串的切片访问方式\n",
  155. "**运行并理解下面表达式中切片的作用**\n",
  156. "\n",
  157. "`str[start:end:step]` \n",
  158. "1.下标可以使用正序下标,也可以使用逆序下标。第一个是0,最后一个是-1。 \n",
  159. "2.end的下标是不包含在截取串中。 \n",
  160. "3.step值为-1,表示逆序。 \n",
  161. "4.逆序切片时,start表示源串的右面的位置下标,end表示源串的左面位置下标,且不包含。 \n",
  162. "例如:要取s中Python world进行逆序。start的值为-2,end值为5,step为-1。 \n"
  163. ]
  164. },
  165. {
  166. "cell_type": "code",
  167. "execution_count": null,
  168. "metadata": {},
  169. "outputs": [],
  170. "source": [
  171. "s=\"Hello,Python world!\"\n",
  172. "s[0]"
  173. ]
  174. },
  175. {
  176. "cell_type": "code",
  177. "execution_count": null,
  178. "metadata": {},
  179. "outputs": [],
  180. "source": [
  181. "s[5]"
  182. ]
  183. },
  184. {
  185. "cell_type": "code",
  186. "execution_count": null,
  187. "metadata": {},
  188. "outputs": [],
  189. "source": [
  190. "s[-1]"
  191. ]
  192. },
  193. {
  194. "cell_type": "code",
  195. "execution_count": null,
  196. "metadata": {},
  197. "outputs": [],
  198. "source": [
  199. "s[:5]"
  200. ]
  201. },
  202. {
  203. "cell_type": "code",
  204. "execution_count": null,
  205. "metadata": {},
  206. "outputs": [],
  207. "source": [
  208. "s[6:-7]"
  209. ]
  210. },
  211. {
  212. "cell_type": "code",
  213. "execution_count": null,
  214. "metadata": {},
  215. "outputs": [],
  216. "source": [
  217. "s[:-1]"
  218. ]
  219. },
  220. {
  221. "cell_type": "code",
  222. "execution_count": null,
  223. "metadata": {},
  224. "outputs": [],
  225. "source": [
  226. "s[::-1]"
  227. ]
  228. },
  229. {
  230. "cell_type": "code",
  231. "execution_count": null,
  232. "metadata": {},
  233. "outputs": [],
  234. "source": [
  235. "s[:5:-1]"
  236. ]
  237. },
  238. {
  239. "cell_type": "code",
  240. "execution_count": null,
  241. "metadata": {},
  242. "outputs": [],
  243. "source": [
  244. "s[-2::-1]"
  245. ]
  246. },
  247. {
  248. "cell_type": "code",
  249. "execution_count": null,
  250. "metadata": {},
  251. "outputs": [],
  252. "source": [
  253. "s[-2:5:-1]"
  254. ]
  255. },
  256. {
  257. "cell_type": "markdown",
  258. "metadata": {},
  259. "source": [
  260. "### 3.字符串运算"
  261. ]
  262. },
  263. {
  264. "cell_type": "code",
  265. "execution_count": null,
  266. "metadata": {},
  267. "outputs": [],
  268. "source": [
  269. "s1=\"Hello,\"\n",
  270. "s2=\" Python\"\n",
  271. "s=s1+s2\n",
  272. "s"
  273. ]
  274. },
  275. {
  276. "cell_type": "code",
  277. "execution_count": null,
  278. "metadata": {},
  279. "outputs": [],
  280. "source": [
  281. "s1 in s"
  282. ]
  283. },
  284. {
  285. "cell_type": "code",
  286. "execution_count": null,
  287. "metadata": {},
  288. "outputs": [],
  289. "source": [
  290. "s=s1+s2*3\n",
  291. "s"
  292. ]
  293. },
  294. {
  295. "cell_type": "code",
  296. "execution_count": null,
  297. "metadata": {},
  298. "outputs": [],
  299. "source": []
  300. },
  301. {
  302. "cell_type": "code",
  303. "execution_count": null,
  304. "metadata": {},
  305. "outputs": [],
  306. "source": [
  307. "#\"program\" "
  308. ]
  309. },
  310. {
  311. "cell_type": "code",
  312. "execution_count": null,
  313. "metadata": {},
  314. "outputs": [],
  315. "source": [
  316. "#\"prolan\" "
  317. ]
  318. },
  319. {
  320. "cell_type": "code",
  321. "execution_count": null,
  322. "metadata": {},
  323. "outputs": [],
  324. "source": [
  325. "#\"amamam\""
  326. ]
  327. },
  328. {
  329. "attachments": {
  330. "image-2.png": {
  331. "image/png": "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"
  332. }
  333. },
  334. "cell_type": "markdown",
  335. "metadata": {},
  336. "source": [
  337. "### 4.字符串处理函数和内置字符串处理方法\n",
  338. "![image-2.png](attachment:image-2.png)"
  339. ]
  340. },
  341. {
  342. "cell_type": "code",
  343. "execution_count": null,
  344. "metadata": {},
  345. "outputs": [],
  346. "source": [
  347. "#\n",
  348. "s=\"Python String\"\n",
  349. "s.upper()"
  350. ]
  351. },
  352. {
  353. "cell_type": "code",
  354. "execution_count": null,
  355. "metadata": {},
  356. "outputs": [],
  357. "source": [
  358. "s.lower()"
  359. ]
  360. },
  361. {
  362. "cell_type": "code",
  363. "execution_count": null,
  364. "metadata": {},
  365. "outputs": [],
  366. "source": [
  367. "s"
  368. ]
  369. },
  370. {
  371. "cell_type": "code",
  372. "execution_count": null,
  373. "metadata": {},
  374. "outputs": [],
  375. "source": [
  376. "s.find('i')"
  377. ]
  378. },
  379. {
  380. "cell_type": "code",
  381. "execution_count": null,
  382. "metadata": {},
  383. "outputs": [],
  384. "source": [
  385. "s.replace('ing','gni')"
  386. ]
  387. },
  388. {
  389. "cell_type": "code",
  390. "execution_count": null,
  391. "metadata": {},
  392. "outputs": [],
  393. "source": [
  394. "s"
  395. ]
  396. },
  397. {
  398. "cell_type": "code",
  399. "execution_count": null,
  400. "metadata": {},
  401. "outputs": [],
  402. "source": [
  403. "t = s.split()\n",
  404. "t"
  405. ]
  406. },
  407. {
  408. "cell_type": "code",
  409. "execution_count": null,
  410. "metadata": {},
  411. "outputs": [],
  412. "source": [
  413. "s1 = \"-\".join(t)\n",
  414. "s1"
  415. ]
  416. },
  417. {
  418. "cell_type": "code",
  419. "execution_count": null,
  420. "metadata": {},
  421. "outputs": [],
  422. "source": [
  423. "t = s1.split(\"-\")\n",
  424. "t"
  425. ]
  426. },
  427. {
  428. "cell_type": "code",
  429. "execution_count": null,
  430. "metadata": {},
  431. "outputs": [],
  432. "source": [
  433. "s.find('t')"
  434. ]
  435. },
  436. {
  437. "cell_type": "code",
  438. "execution_count": null,
  439. "metadata": {},
  440. "outputs": [],
  441. "source": [
  442. "s.find('t',3)"
  443. ]
  444. },
  445. {
  446. "cell_type": "code",
  447. "execution_count": null,
  448. "metadata": {},
  449. "outputs": [],
  450. "source": [
  451. "s.find('t',9)"
  452. ]
  453. },
  454. {
  455. "cell_type": "code",
  456. "execution_count": null,
  457. "metadata": {},
  458. "outputs": [],
  459. "source": [
  460. "s.index('t')\n"
  461. ]
  462. },
  463. {
  464. "cell_type": "code",
  465. "execution_count": null,
  466. "metadata": {},
  467. "outputs": [],
  468. "source": [
  469. "s.index('t',9)\n"
  470. ]
  471. },
  472. {
  473. "cell_type": "markdown",
  474. "metadata": {},
  475. "source": [
  476. "### 5.string模块\n",
  477. "import string \n",
  478. "string.digits 可返回'0123456789' \n",
  479. "string.ascii_lowercase 可返回'abcdefghijklmnopqrstuvwxyz' \n",
  480. "string.ascii_uppercase 可返回'ABCDEFGHIJKLMNOPQRSTUVWXYZ' \n",
  481. "string.punctuation 可返回'!\"#$%&\\'()*+,-./:;<=>?@[\\\\]^_`{|}~' "
  482. ]
  483. },
  484. {
  485. "cell_type": "code",
  486. "execution_count": 56,
  487. "metadata": {},
  488. "outputs": [],
  489. "source": [
  490. "import string"
  491. ]
  492. },
  493. {
  494. "cell_type": "code",
  495. "execution_count": 57,
  496. "metadata": {},
  497. "outputs": [
  498. {
  499. "data": {
  500. "text/plain": [
  501. "'0123456789'"
  502. ]
  503. },
  504. "execution_count": 57,
  505. "metadata": {},
  506. "output_type": "execute_result"
  507. }
  508. ],
  509. "source": [
  510. "string.digits "
  511. ]
  512. },
  513. {
  514. "cell_type": "code",
  515. "execution_count": 58,
  516. "metadata": {},
  517. "outputs": [
  518. {
  519. "name": "stdout",
  520. "output_type": "stream",
  521. "text": [
  522. "! \" # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \\ ] ^ _ ` { | } ~ "
  523. ]
  524. }
  525. ],
  526. "source": [
  527. "for ch in string.punctuation:\n",
  528. " print(ch,end=\" \")"
  529. ]
  530. },
  531. {
  532. "cell_type": "markdown",
  533. "metadata": {},
  534. "source": [
  535. "### 试一试\n",
  536. "\n",
  537. "利用s1、s2和字符串操作(使用切片、连接、复制、字符串函数),写出能产生下列结果的表达式。 \n",
  538. "s1='programming' \n",
  539. "s2='language' \n",
  540. "(1)\"program\" \n",
  541. "(2)\"prolan\" \t\n",
  542. "(3)\"amamam\" \n",
  543. "(4)\"progr@mming l@ngu@ge\" \n"
  544. ]
  545. },
  546. {
  547. "cell_type": "code",
  548. "execution_count": null,
  549. "metadata": {},
  550. "outputs": [],
  551. "source": [
  552. "s1='programming'\n",
  553. "s2='language'"
  554. ]
  555. },
  556. {
  557. "cell_type": "code",
  558. "execution_count": null,
  559. "metadata": {},
  560. "outputs": [],
  561. "source": [
  562. "#(1)\"program\" \n"
  563. ]
  564. },
  565. {
  566. "cell_type": "code",
  567. "execution_count": null,
  568. "metadata": {},
  569. "outputs": [],
  570. "source": [
  571. "#(2)\"prolan\" \n"
  572. ]
  573. },
  574. {
  575. "cell_type": "code",
  576. "execution_count": null,
  577. "metadata": {},
  578. "outputs": [],
  579. "source": [
  580. "#(3)\"amamam\"\n"
  581. ]
  582. },
  583. {
  584. "cell_type": "code",
  585. "execution_count": null,
  586. "metadata": {},
  587. "outputs": [],
  588. "source": [
  589. "#(4)\"progr@mming l@ngu@ge\"\n"
  590. ]
  591. },
  592. {
  593. "cell_type": "code",
  594. "execution_count": null,
  595. "metadata": {},
  596. "outputs": [],
  597. "source": [
  598. "#(5)'Programming Language'"
  599. ]
  600. },
  601. {
  602. "cell_type": "markdown",
  603. "metadata": {},
  604. "source": [
  605. "### 试一试:\n",
  606. "寻找一个源字符串s中的子串sub的所有位置。 \n",
  607. "试使用不同的方法实现 \n",
  608. "运行示例: \n",
  609. " ` \n",
  610. "s=do not,for one repuls,forgo the purpose that you resolved to effort \n",
  611. "sub=o \n",
  612. "1\t4\t8\t11\t23\t26\t36\t46\t52\t59\t64\tover ` "
  613. ]
  614. },
  615. {
  616. "cell_type": "raw",
  617. "metadata": {},
  618. "source": [
  619. "方法一 使用find函数,while语句实现\n",
  620. "循环的构建\n",
  621. "(1)循环通项\n",
  622. "index=s.find(sub,start)\n",
  623. "print(index)\n",
  624. "start=index+1\n",
  625. "(2)循环控制:index为-1 循环结束\n",
  626. "index的初值,第一次执行find\n",
  627. "index的终值-1\n",
  628. "index的变化,再次执行find\n",
  629. "\n"
  630. ]
  631. },
  632. {
  633. "cell_type": "code",
  634. "execution_count": null,
  635. "metadata": {},
  636. "outputs": [],
  637. "source": []
  638. },
  639. {
  640. "cell_type": "code",
  641. "execution_count": null,
  642. "metadata": {},
  643. "outputs": [],
  644. "source": [
  645. "方法二 while True...if ...break 算法模式实现\n"
  646. ]
  647. },
  648. {
  649. "cell_type": "raw",
  650. "metadata": {},
  651. "source": [
  652. "方法三 使用index函数\n",
  653. "\n",
  654. "(1)循环通项\n",
  655. "index=s.find(sub,start)\n",
  656. "print(index)\n",
  657. "start=index+1\n",
  658. "(2)循环控制 :当异常ValueError发生,break跳出循环"
  659. ]
  660. },
  661. {
  662. "cell_type": "markdown",
  663. "metadata": {},
  664. "source": [
  665. "## 6.字符串典型算法设计\n",
  666. "(1)编码解析\n",
  667. "(2)逆序数\n",
  668. "(3)分类统计\n"
  669. ]
  670. },
  671. {
  672. "cell_type": "markdown",
  673. "metadata": {},
  674. "source": [
  675. "### (1)编码解析 \n",
  676. "*使用切片获取子串* \n",
  677. "*使用format函数、连接运算(+)构造字符串* \n",
  678. "【例】身份证解析: \n",
  679. "输入一个昵称和身份证号的信息, \n",
  680. "从身份证中提取出生日期和性别的信息,输出昵称和出生日期, \n",
  681. "且在6月份出生的人员后标注“准备礼物”, \n",
  682. "如果该用户是女性,则再加上“+鲜花”进行标注。"
  683. ]
  684. },
  685. {
  686. "cell_type": "code",
  687. "execution_count": 59,
  688. "metadata": {},
  689. "outputs": [
  690. {
  691. "name": "stdout",
  692. "output_type": "stream",
  693. "text": [
  694. "请输入昵称:红太狼\n",
  695. "请输入身份证号码:309012199606230083\n",
  696. "红太狼\t1996年06月23日\n",
  697. "准备礼物+鲜花\n"
  698. ]
  699. }
  700. ],
  701. "source": [
  702. "nickname=input(\"请输入昵称:\")\n",
  703. "ids=input(\"请输入身份证号码:\")\n",
  704. "\n",
  705. "birthDay=\"{}年{}月{}日\".format(ids[6:10],ids[10:12],ids[12:14]) #构造生日\n",
  706. "msg=\"{}\\t{}\\n\".format(nickname,birthDay) #构造输出字符串\n",
  707. "if ids[-8:-6]=='06': #生日为6月\n",
  708. " msg+=\"准备礼物\"\n",
  709. " if int(ids[-2])%2==0: #是女性\n",
  710. " msg+=\"+鲜花\"\n",
  711. "print(msg)\n"
  712. ]
  713. },
  714. {
  715. "cell_type": "raw",
  716. "metadata": {},
  717. "source": [
  718. "str的format函数可以用于构造一个格式字符串,格式字符串中{}对应的内容由参数列表中的参数值按格式规定显示。\n",
  719. "ids[10:12]和ids[-8:-6]都是月份对应的子串,前者使用正序索引,后者使用逆序索引。\n",
  720. "msg是输出字符串变量,注意msg的逐步构造的方法:先通过赋值语句获得第一行昵称和出生年月,然后通过连接操作,追加第2行的输出文本内容。使用一个字符串变量可以操作多行文本。\n"
  721. ]
  722. },
  723. {
  724. "cell_type": "markdown",
  725. "metadata": {},
  726. "source": [
  727. "### (2)求逆序数 \n",
  728. "整数类型和字符串可以相互转换,使用字符串操作方便实现逆序功能。 "
  729. ]
  730. },
  731. {
  732. "cell_type": "raw",
  733. "metadata": {},
  734. "source": [
  735. "【例】输入若干个整数quit结束,求所有整数的逆序数之和。\n",
  736. "运行示例\n",
  737. "input x:45\n",
  738. "input x:-12\n",
  739. "input x:30\n",
  740. "input x:quit\n",
  741. "54+(-21)+3 = 36\n"
  742. ]
  743. },
  744. {
  745. "cell_type": "code",
  746. "execution_count": null,
  747. "metadata": {},
  748. "outputs": [],
  749. "source": [
  750. "s=0 #累加器\n",
  751. "outstr=\"\" #输出字符串\n",
  752. "while True:\n",
  753. " x=input(\"input x:\") #循环控制结构\n",
  754. " if x==\"quit\":\n",
  755. " break\n",
  756. " #字符串切片操作求逆序数\n",
  757. " if x[0]==\"-\":\n",
  758. " x=int( x[:0:-1])*-1\n",
  759. " else:\n",
  760. " x=int(x[::-1])\n",
  761. " #使用格式字符串和连接操作构造输出字符串\n",
  762. " if x<0:\n",
  763. " outstr+=\"({})+\".format(x)\n",
  764. " else:\n",
  765. " outstr+=str(x)+\"+\"\n",
  766. " #累加逆序数\n",
  767. " s=s+x\n",
  768. "print(outstr[:-1],\"=\",s) \n"
  769. ]
  770. },
  771. {
  772. "cell_type": "markdown",
  773. "metadata": {},
  774. "source": [
  775. "说明:\n",
  776. "1.input函数输入得到字符串,实现逆序,构造输出字符串的括号和负号,使用字符串方便。\n",
  777. "2.求累加和是整数的运算,使用int转换数据类型。\n",
  778. "3.理解切片:x[:0:-1]和x[::-1]区别,是否保留字符\"-\"。负数字符串要先除去字符\"-\",才能逆序操作。\n",
  779. "4.outstr变量用于构造最后的输出字符串,每一次循环连接一个数和符号\"+\"。最后一个数后的\"+\"要除去,使用切片操作:outstr[:-1]"
  780. ]
  781. },
  782. {
  783. "cell_type": "markdown",
  784. "metadata": {},
  785. "source": [
  786. "### (3) 字符统计\n",
  787. "遍历字符串的算法模式:\n",
  788. "```python \n",
  789. "for ch in s:\n",
  790. " ...ch...\n",
  791. "```\n",
  792. "判断字符分类的方法可以不同的方法\n",
  793. "* ASCII的值判断\n",
  794. "* str函数判断\n",
  795. "* string模块的常量字符集判断"
  796. ]
  797. },
  798. {
  799. "cell_type": "raw",
  800. "metadata": {},
  801. "source": [
  802. "【例】编写程序,用于统计各类字符个数。输入一个字符串,统计其中大写字母,小写字母,数字的个数,其他各类字符的总数。 \n",
  803. "运行示例:\n",
  804. "please input char:HELLO python 123! \n",
  805. "大写字母5个,小写字母6个,数字3个,其他字符3个 \n"
  806. ]
  807. },
  808. {
  809. "cell_type": "code",
  810. "execution_count": null,
  811. "metadata": {},
  812. "outputs": [],
  813. "source": [
  814. "# ASCII的值判断\n",
  815. "instr=input('please input char:')\n",
  816. "upper,lower,digit,other=0,0,0,0\n",
  817. "for c in instr:\n",
  818. " if c>='A' and c<='Z':\n",
  819. " upper=upper+1\n",
  820. " elif c>='a' and c<='z':\n",
  821. " lower=lower+1\n",
  822. " elif c>='0' and c<='9':\n",
  823. " digit=digit+1\n",
  824. " else:\n",
  825. " other=other+1\n",
  826. "print('大写字母{}个,小写字母{}个,数字{}个,其他字符{}个'.format(upper,lower,digit,other))\n"
  827. ]
  828. },
  829. {
  830. "cell_type": "code",
  831. "execution_count": 61,
  832. "metadata": {},
  833. "outputs": [
  834. {
  835. "name": "stdout",
  836. "output_type": "stream",
  837. "text": [
  838. "please input char:please input char:HELLO python 123! \n",
  839. " 大 写 字 母 5 个 , 小 写 字 母 21 个 , 数 字 3 个 , 其 他 字 符 8 个 \n"
  840. ]
  841. }
  842. ],
  843. "source": [
  844. "# str函数判断\n",
  845. "instr=input('please input char:') \n",
  846. "upper,lower,digit,other=0,0,0,0 \n",
  847. "for c in instr: \n",
  848. " if c.isupper():\n",
  849. " upper=upper+1 \n",
  850. " elif c.islower(): \n",
  851. " lower=lower+1 \n",
  852. " elif c.isdigit(): \n",
  853. " digit=digit+1 \n",
  854. " else: \n",
  855. " other=other+1 \n",
  856. "\n",
  857. "\n",
  858. "msg = f' 大 写 字 母 {upper} 个 , 小 写 字 母 {lower} 个 , 数 字 {digit} 个 , 其 他 字 符 {other} 个 '\n",
  859. "print(msg)\n"
  860. ]
  861. },
  862. {
  863. "cell_type": "raw",
  864. "metadata": {},
  865. "source": [
  866. "\n",
  867. "字符串.isalnum() 所有字符都是数字或者字母,为真返回 Ture,否则返回 False。\n",
  868. "字符串.isalpha() 所有字符都是字母,为真返回 Ture,否则返回 False。\n",
  869. "字符串.isdigit() 所有字符都是数字,为真返回 Ture,否则返回 False。\n",
  870. "字符串.islower() 所有字符都是小写,为真返回 Ture,否则返回 False。\n",
  871. "字符串.isupper() 所有字符都是大写,为真返回 Ture,否则返回 False。\n",
  872. "字符串.istitle() 所有单词都是首字母大写,为真返回 Ture,否则返回 False。\n",
  873. "字符串.isspace() 所有字符都是空白字符,为真返回 Ture,否则返回 False。 \n"
  874. ]
  875. },
  876. {
  877. "cell_type": "code",
  878. "execution_count": null,
  879. "metadata": {},
  880. "outputs": [],
  881. "source": [
  882. "#string模块的常量字符集判断\n",
  883. "import string\n",
  884. "instr=input('please input char:')\n",
  885. "upper,lower,digit,other=0,0,0,0\n",
  886. "for c in instr:\n",
  887. " if c in string.ascii_uppercase :\n",
  888. " upper=upper+1\n",
  889. " elif c in string.ascii_lowercase:\n",
  890. " lower=lower+1\n",
  891. " elif c in string.digits:\n",
  892. " digit=digit+1\n",
  893. " else:\n",
  894. " other=other+1\n",
  895. "print('大写字母{}个,小写字母{}个,数字{}个,其他字符{}个'.format(upper,lower,digit,other))\n"
  896. ]
  897. },
  898. {
  899. "cell_type": "markdown",
  900. "metadata": {},
  901. "source": [
  902. "### 小试身手"
  903. ]
  904. },
  905. {
  906. "cell_type": "raw",
  907. "metadata": {},
  908. "source": [
  909. "(1)编写程序 实现二进制IP地址转为十进制IP地址。 \n",
  910. "一个IP地址是由四个字节(每个字节8个位)的二进制码组成。输入一个合法的二进制表示的IP地址,请将其转换为十进制格式表示的IP地址输出(不考虑异常输入数据)。\n",
  911. "运行示例: \n",
  912. "input:11001100100101000001010101110010 \n",
  913. "output:204.148.21.114 \n",
  914. "\n",
  915. "提示:int(str,base=2)可以将一个二进制字符串转化为十进制整数 \n",
  916. ">>> int(\"110111101\",2) \n",
  917. "445 "
  918. ]
  919. },
  920. {
  921. "cell_type": "markdown",
  922. "metadata": {},
  923. "source": [
  924. "(2)编写程序 随机产生50个-1000~1000之间的整数,输出其中逆序数大于原数据的整数并统计个数。每个整数之间空格间隔。\n",
  925. "\n",
  926. "输出示例:\n",
  927. "687 -564 -662 -873 519 367 -625 375 436 -981 -742 -231 -671 -382 -32 -30 -958 -920 -520 -97 -350 69 29 \n",
  928. "共23个数"
  929. ]
  930. },
  931. {
  932. "cell_type": "code",
  933. "execution_count": null,
  934. "metadata": {},
  935. "outputs": [],
  936. "source": [
  937. "(3)编写程序 实现电文加密\n",
  938. "有一行电文,已按如下规律译成密码:\n",
  939. "A-->Z a-->z\n",
  940. "B-->Y b-->y\n",
  941. "C-->X c-->x\n",
  942. " ...... ......\n",
  943. "即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求根据密码译回原文,并输出。\n",
  944. "\n",
  945. "运行示例\n",
  946. "input:ABC123abc \n",
  947. "output:ZYX123zyx\n",
  948. "运行示例\n",
  949. "input:Life is like an ice cream, enjoy it before it melts. \n",
  950. "output:Oruv rh orpv zm rxv xivzn, vmqlb rg yvuliv rg nvogh. \n"
  951. ]
  952. }
  953. ],
  954. "metadata": {
  955. "kernelspec": {
  956. "display_name": "Python 3",
  957. "language": "python",
  958. "name": "python3"
  959. },
  960. "language_info": {
  961. "codemirror_mode": {
  962. "name": "ipython",
  963. "version": 3
  964. },
  965. "file_extension": ".py",
  966. "mimetype": "text/x-python",
  967. "name": "python",
  968. "nbconvert_exporter": "python",
  969. "pygments_lexer": "ipython3",
  970. "version": "3.7.10"
  971. }
  972. },
  973. "nbformat": 4,
  974. "nbformat_minor": 2
  975. }