(最大数的出现)编写程序读取整数,找出它们中的最大值,然后计算它的出现次数。
假设输入以数字0 结束。假设你输入的是“3 5 2 5 5 50”;序找出的最大数是而 的出现次数是4(提示:维护两个变量 max和count。变量 max 存储的是当前最大数,而count 存储的是它的出现次数。初始状态下,将第一个值赋值给 max,将1赋值给 count。将 max 和每个随后的数字进行比较。如果这个数字大于 max,就将它赋值给 max 且将 ount重置为1。如果这个数等于max,给 count自增1。)
mnx = 0
count = 0
while True:
num = int(input("请输入一个数字 (以数字0结束): "))
if num == 0:
break
if num > mnx:
mnx = num
count = 1
elif num == mnx:
count += 1
print("最大的数字是:", mnx)
print("最大数字出现的次数是: ", count)
(十进制到二进制)编写程序提示用户输人一个十进制整数,然后显示它对应的二进制数。
Dec = int(input("请输入一个十进制数:"))
print(bin(Dec))
(十进制到十六进制)编写程序提示用户输人一个十进制数,然后显示它对应的十六进制数
Dec = int(input("请输入一个十进制数:"))
print(hex(Dec))
(蒙特卡罗模拟)一个正方形被分为四个更小的区域,如图a所示。如果你投掷一个飞镖到这个正方形一百万次,这个飞镖落在一个奇数区域里的概率是多少?编写程序模拟这个过程然后显式结果。(提示:将这个正方形的中心放在坐标系统的中心位置,如图b 所示。在正方形中随机产生一个点,然后统计这个点落入奇数区域的次数。
import random
sm = 0
for i in range(0, 1000001):
x = random.random() * random.choice([-1, 1])
y = random.random() * random.choice([-1, 1])
if x <= 0 or (x >= 0 and y >= 0 and (y / (1 - x) >= 1)):
sm += 1
a = sm / 1000000
print("1000000个随机点落在奇数区域的概率是%.12f" % a)
(显示闰年)编写程序显示21世纪(从 2001 年到 2100年)里所有的闰年,每行显示 10个闰年,这些年被一个空格隔开。
xy = 0
for y in range(2001, 2101):
if y % 400 == 0 or y % 4 == 0 and y % 100 != 0:
print(y, end=" ")
xy += 1
if xy % 10 == 0:
print()
十进制数d转换为十六进制所满足的条件
(求一个整数各个数字的和)编写一个函数,计算一个整数各个数字的和。使用下面的函数头:
def sumDigits(n):
number = int(input("请输入一个数字:"))
def sumDigits(n):
sm = 0
while n != 0:
sm += n % 10
n = n // 10
(反向显示一个整数)编写下面的函数,反向显示一个整数
def reverse(number):
编写一个测试程序,提示用户输入一个整数,然后显示它的相反数
number = int(input("请输入一个数字:"))
def reverse(num):
rum = 0
while num != 0:
rum = rum * 10 + num % 10
num //= 10
return rum
print(reverse(number))
(摄氏度和华氏度之间的转换)编写一个包含下面两个函数的模块
# Converts from Cesius to Fahrenheit
def celsiusToFahrenheit(celsius):
# Converts from Fahrenheit to Celsius
def fahrenheitToCelsius(fahrenheit):
转换公式是:
celsius = (5/ 9)*(fahrenheit - 32)
fahrenheit = (9/5)*celsius +32
编写一个测试程序,调用这两个函数来显示下面的表格
Celsius | Fahrenheit | Fahrenheit | Celsius |
40.0 | 104.0 | 120.0 | 48.89 |
39.0 | 102.2 | 110.0 | 43.33 |
... | ... | ... | ... |
32.0 | 89.6 | 40.0 | 4.44 |
31.0 | 87.8 | 30.0 | -1.11 |
def celsiusToFahrenheit(celsius):
Fahrenheit = (9 / 5) * celsius + 32
return Fahrenheit
def fahrenheitToCelsius(fahrenheit):
celsius = (5 / 9) * (fahrenheit - 32)
return celsius
print("Celsius\t\tFahrenheit\t\tFahrenheit\tCelsius")
i = 40
for j in range(120, 20, -10):
print(i, end="\t\t\t")
print("%.1f" % (celsiusToFahrenheit(i)), end="\t\t\t")
print(j, end="\t\t\t")
print("%.2f" % (fahrenheitToCelsius(j)))
i -= 1
if i == 30:
break
(数列求和)编写一个函数计算下面的数列
def m(i):
sum = 0
print(i, end="\t\t\t\t")
for i in range(1, i + 1):
sum += i / (i + 1)
return sum
print("i\t\t\t\tm(i)")
for i in range(1, 21):
print("%.4f" % m(i))
(MyTriangle 模块)创建一个名叫 MyTriangle 的模块,它包含下面两个函数
# Returns true if the sum of any two sides is
# greater than the third side
def isValid(side1,side2,side3):
# Returns the area of the triangle.
def area(side1,side2,side3):
编写一个测试程序,读入三角形三边的值,若输人有效则计算面积。否则,显示输人无效计算三角形面积的公式在编程题 2.14 中给出。下面是一些示例运行。
def isValid(side1, side2, side3):
return side1 + side2 > side3 and side2 + side3 > side1 and side1 + side3 > side2
def area(side1, side2, side3):
s = (side1 + side2 + side3) / 2
return (s * (s - side1) * (s - side2) * (s - side3)) ** 0.5
s1, s2, s3 = eval(input("请输入三角形三边长:"))
if isValid(s1, s2, s3):
print("area is %.2f" % area(s1, s2, s3))
else:
print("Invalid")
数学问题:平方根的近似求法 ath 模块里有几种实现 sqrt 函数的方法。其中一种方法就是巴比伦函数。它通过重复地使用下面的公式计算求出 n 的平方根的近似值。
nextGuess = (lastGuess + (n / astGuess)) / 2
当 nextGuess 和 lastGuess 很接近时,nextGuess 就是平方根的近似值。初始的猜测值可以是任意的正数(例如:1)。这个值将是 lastGuess 的开始值。如果 nestGuess 和 lastGuess 的差别非常小时,例如:0.0001,你可以说 nestGuess 就是 n 的平方根近似值。否则,nextGuess 就变成lastGucss,这个近似过程继续。实现下面的函数返回n的平方根。
def sqrt(n):
(反素数)反素数(逆向拼写的素数) 是指一个将其逆向拼写后也是一个素数的非回文数。例如:17 和71 都是素数,所以,17和71 都是反索数。编写序显示前 00 个反素数。每行显示10个数字,并且准确对齐,如下所示
(梅森素数)如果一个素数可以写成2的形式,其中p是某个正整数,那么这个数就被称作梅森素数。编写程序找出所有 p ≤31 的梅森素数。然后显示如下结果。
(双素数)双素数是指一对差值为2 的素数。例如:3 和 就是一对双素数,5 和7就是一对双素数,11 和 13 也是一对双素数。编写程序,找出所有小于 1000 的双素数。显示结果如下所示。
做一个用户管理系统:
实现用户注册
登录
密码加密
发表文章
查寻自己文章
修改文章
修改密码
退出系统
import sys
import hashlib
# 用来存储所有的用户信息
users = []
slat = "lx"
def password_by_md5(password):
md5 = hashlib.md5(password.encode("utf-8"))
# 盐值
md5.update(slat.encode("utf-8"))
return md5.hexdigest()
def main():
print("~*" * 20)
print("")
print("\t\t 1、用户注册\n")
print("\t\t 2、用户登录\n")
print("\t\t 3、退出系统\n")
print("~*" * 20)
choice = input("请输入您要操作的选项:")
return choice
def exists_user(username):
for i in users:
if i.get("username") == username:
return True
return False
def is_login(username, password):
for i in users:
if i.get("username") == username and i.get("password") == password:
print("登录成功")
return True
return False
def register():
username = input("请输入您的用户名称:")
password = input("请输入您的用户密码")
# 校验数据
if username is None or username.strip() == "":
print("对不起,用户名不能为空")
return
if password is None or password.strip() == "" or len(password) < 3:
print("对不起,密码长度不能少于3位")
return
# 判断该用户是否存在
if exists_user(username):
print("对不起,该用户已经存在,请重新输入!!")
return
# 组建成一个字典对象
user = {"username": username, "password": password_by_md5(password)}
users.append(user)
print(users)
def login():
username = input("请输入您的用户名称:")
password = input("请输入您的用户密码")
# 加密密码
password = password_by_md5(password)
if is_login(username, password):
print("恭喜你,登录成功")
else:
print("对不起,登录失败,请重新登录")
while True:
choice = main()
if choice == "1":
register()
elif choice == "2":
login()
else:
print("程序正常退出")
sys.exit(0)
爬楼梯问题
汉诺塔
不死兔子问题
某个人进入如下一个棋盘中,要求从左上角开始走,最后从右下角出来(要求只能前进,不能后退),问题:共有多少种走法?
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
x = []
for i in range(0, 5):
x.append([])
for j in range(0, 8):
x[i].append(0)
if i == 0 and j != 0:
x[i][j] = x[i][j - 1] + 1
elif i != 0 and j == 0:
x[i][j] = x[i - 1][j] + 1
elif i != 0 and j != 0:
x[i][j] = x[i - 1][j] + x[i][j - 1]
print(f"{x[len(x) - 1][len(x[0]) - 1]}")