初学Python可能会遇见的小程序

时间:2024-10-09 07:07:08

初学Python可能会遇见的小程序

  • 前言
  • 《孙子算经》中的典例
  • 取随机数问题
  • “水仙花数”问题
    • for循环
    • while循环
  • 九九乘法表
  • 简单选择排序
  • 回文数问题
    • 序列的分片
    • .reverse() 运算
  • 猜数小游戏

前言

本文总结了在大一上这一学期内我觉得比较经典的一些Python小程序,其中有一部分是我的授课老师在课上布置的任务,但代码都是我自己敲的。期待大家在评论区留下宝贵的意见~

《孙子算经》中的典例

问:今有物不知其数,三三数之余二,五五数之余三,七七数之余二,问几何?

n = 0
while True:
    n = n + 1
    if n % 3 == 2 and n % 5 == 3 and n % 7 == 2:
        print('符合条件的数是%s' % n)
        break
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里介绍一下 while True 的用法:
whileTrue 意思是要一直进行死循环,所以通常会在while true循环中加入break条件判断,用来使在循环内部的某个条件达成时终止循环,通常用于需要多次输入并判断的场景,比如输入密码的程序。下面是一个例子:

key = int(input('请输入:'))
while True:
    if key <= 0:
        key = int(input('输入错误,请重新输入:'))
        continue
    else:
        print(key)
        break
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

取随机数问题

请X侧,第X排,第X列的同学回答问题。

import random
a = random. randint(0, 1)
b = random. randint(1, 10)
c = random. randint(1, 10)
if a == 0:
    a = '左'
else:
    a = '右'
print('请%s侧,第%s排,第%s列的同学来回答问题。'%(a, b, c))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

“水仙花数”问题

例如153,三位数,33+53+1^3=153,写一个程序,输出所有的水仙花数
这里介绍两种方法:

for循环

for x in range(100,1000):
    a = x // 100
    b = x // 10 - a * 10
    c = x % 10
    if x == a**3 + b**3 + c**3:
        print(x)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

while循环

x = 100
while x < 1000:
    a = x // 100
    b = x // 10 - a * 10
    c = x % 10
    if x == a**3 + b**3 + c**3:
        print(x)
    x += 1		# += 表示增强赋值
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

九九乘法表

按照九九乘法表的格式,写一个程序,输出一个九九乘法表:
这里要用到嵌套循环

for i in range(1, 10):
    for j in range(1, i+1):
        x = i * j
        print('%s * %s = %s' % (j, i, x), end='  ')
    print()
  • 1
  • 2
  • 3
  • 4
  • 5

注意,pycharm里的print() 函数默认换行,设置end=’ 'print() 就不会进行换行操作,当这个循环完成后设置print() 换行。

简单选择排序

a = [23, 45, 13, 9, 52, 18]
for i in range(len(a)):
    for j in range(i+1, len(a)):
        if a[i] > a[j]:
            a[i], a[j] = a[j], a[i]		#更换列表元素的位置
print(a)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

说明一下,Python里有内置函数sort() ,可直接将序列进行升降排序,写这个程序的目的是为了更好地理解嵌套循环。

回文数问题

回文数问题我们可以用序列的通有方法或列表的专有方法来解决:

序列的分片

x = input('请输入一个数:')
y = x[::-1]
if x == y:
    print('%s是回文数' % x)
else:
    print('%s不是回文数' % x)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

.reverse() 运算

x = input('请输入一个数:')
a = list(x)
b = a[:]
()
if a == b:
    print('%s是回文数' % x)
else:
    print('%s不是回文数' % x)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注意,这两种方法是有很大的区别的,序列的通用方法不改变原有列表,而.reverse() 运算会改变原有列表,故一般推荐使用序列的通用方法。

猜数小游戏

设计一个程序,计算机随机生成一个数,输入猜数,若猜对,输出“good guess!”,若猜错,计算机会告知猜大了还是猜小了,5次机会之后,游戏结束(“game over!”)

import random
a = (1, 10)
n = 1
while n <= 5:
    b = int(input())
    if b == a:
        print('good guess!')
        break
    elif b > a:
        print('your guess > the key, please try again!')
        n = n + 1
    elif b < a:
        print('your guess < the key, please try again!')j
        n = n + 1
if n > 5:
    print('game over!')
    print('the key is', a)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17