目录
- 判断给定年份是否为闰年
- 设计一个验证用户密码程序
- for循环嵌套运用
- 一个密码安全性检查的脚本代码
- 一个简陋的通讯录程序(字典的运用)
- 一个简陋的用户登录程序(函数基本运用)
- 三个小递归
- 函数不定长参数的运用
1. 判断给定年份是否为闰年
# 判断给定年份是否为闰年
print(' 请输入一个年份,我可以判断它是否为闰年:',end = " ")
temp = input()
while not temp.isdigit():
temp = input(" 抱歉,您的输入有误,请输入一个整数: ")
year = int(temp)
if year%400 == 0:
print(temp+' 是闰年。')
elif year%4 == 0 and year%100 != 0:
print(temp+' 是闰年。')
else:
print(temp+' 不是闰年。')
# 请输入一个年份,我可以判断它是否为闰年: 2020
# 2020 是闰年。
2. 设计一个验证用户密码程序
# 设计一个验证用户密码程序,用户只有三次机会输入错误,
# 不过如果用户输入的内容中包含 "*" 则不计算在内
password = '2a'
print('请输入密码:',end = ' ')
count = 3
while count:
temp = input()
if temp == password:
print('验证通过.')
break
elif '*' in temp:
print('请不要输入包含''*''的内容,您还有',count,'次机会,请重新输入:',end = ' ')
continue
else:
print('输入错误,您还有',count-1,'次机会,请重新输入:',end = ' ')
count -=1
3. for循环嵌套运用
# 有红、黄、蓝三种颜色的球,其中红球 3 个,黄球 3 个,蓝球 6 个。
# 先将这12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配
print('red','\t','yellow','','blue')
for red in range(0,4):
for yellow in range(0,4):
for blue in range(2,7):
if red+yellow+blue == 8:
print(red,'\t',yellow,'\t',blue)
4. 一个密码安全性检查的脚本代码
#请写一个密码安全性检查的脚本代码:
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'
passwd = input(' 请输入需要检查的密码组合: ')
# 判断长度
length = len(passwd)
while (passwd.isspace() or length == 0) :
passwd = input(" 您输入的密码为空(或空格),请重新输入: ")
if length <= 8:
flag_len = 1
elif 8 < length < 16:
flag_len = 2
else:
flag_len = 3
flag_con = 0
# 判断是否包含特殊字符
for each in passwd:
if each in symbols:
flag_con += 1
break
# 判断是否包含字母
for each in passwd:
if each in chars:
flag_con += 1
break
# 判断是否包含数字
for each in passwd:
if each in nums:
flag_con += 1
break
# 打印结果
while 1 :
print(" 您的密码安全级别评定为: ", end='')
if flag_len == 1 or flag_con == 1 :
print(" 低")
elif flag_len == 2 or flag_con == 2 :
print(" 中")
else :
print(" 高")
print(" 请继续保持 ")
break
print(" 请按以下方式提升您的密码安全级别: \n\
\t1. 密码必须由数字、字母及特殊字符三种组合 \n\
\t2. 密码只能由字母开头 \n\
\t3. 密码长度不能低于 16 位")
break
5. 一个简陋的通讯录程序(字典的运用)
#一个简陋的通讯录程序
print('''欢迎进入通讯录程序
1 :查询联系人资料
2 :插入新的联系人
3 :删除已有联系人
4 :退出通讯录程序''')
dict1 = {'华': 2247829280,'夏天': 877169862}
while 1:
temp = int(input('请输入相关的指令代码:'))
if temp == 1:
name = input('请输入联系人姓名:')
if name not in dict1:
print('抱歉,您输入的联系人不存在。',end = '')
yn_2 = input('请问您是否要将其添加到通信录?(YES/NO)')
if yn_2 == 'YES':
temp = 2
else:
continue
else:
print(name ,':',dict1[name])
if temp == 2:
name = input('请输入联系人姓名:')
if name in dict1:
print('您输入的姓名已在通讯录中-->>',name ,':',dict1[name])
yn = input('是否修改用户资料?(YES/NO)')
if yn == 'YES':
# 向字典中添加键值对的一种方法
dict1[name] = input('请输入联系人新的电话:')
else:
continue
dict1[name] = input('请输入联系人电话:')
if temp == 3:
name = input('请输入需要删除的联系人姓名:')
if name not in dict1.keys():
print('您输入的姓名不在通讯录中')
continue
dict1.pop(name)
if temp == 4:
print('感谢使用通讯录程序!')
break
6. 一个简陋的用户登录程序(函数基本运用)
#一个简陋的用户登录程序函数
def showmenu():
# 界面
print('''新建用户:N/n
登陆账号:E/e
退出程序Q/q''')
# 初始值
dict2 = {}
# 循环初始化instr的值
while True:
# 不能为空
instr = ' '
# 使用户输入正确指令代码
while instr not in 'NEQneq':
instr = input('请输入指令代码:')
# 三个功能
if instr in 'Qq':
break
if instr in 'Nn':
new_user(instr,dict2)
if instr in 'Ee':
old_user(instr,dict2)
# 新建
def new_user(instr,dict2):
name = input('请输入用户名:')
# 输入是否为已有用户名
while name in dict2:
name = input('抱歉,此用户名已经被使用,请重新输入:')
dict2[name] = input('请输入密码:')
print('注册成功,赶紧试试登录吧')
# 是否登录
def old_user(instr,dict2):
name = input('请输入用户名:')
# 要登陆的用户的用户名是否存在
while name not in dict2:
name = input('您输入的用户名不存在,请重新输入:')
# 输入的密码是否正确且只有三次机会
count = 3
while input('请输入密码(三次机会):') != dict2.get(name):
print('密码输入错误!')
count -= 1
if count == 0:
print('抱歉,您的三次机会已用完。')
# 跳出输入密码循环体
break
else:
print('欢迎进入XO系统……')
7. 递归
7.1 求最大公约数
# 求最大公约数
def gcd0(a,b):
'''递归'''
t = a % b
a = b
b = t
if b != 0:
gcd1(a,b)
return a
def gcd1(a,b):
'''循环'''
while b:
t = a % b
a = b
b = t
return a
print(gcd0(4,6))
print(gcd1(4,6))
7.2 编写一个将十进制转换为二进制的函数
- 编写一个将十进制转换为二进制的函数,要求采用“除 2 取余”的方式且以字符串的形式返回
# 编写一个将十进制转换为二进制的函数,要求采用“除 2 取余”的方式且以字符串的形式返回
def Dec2Bin0(dec):
temp = []
result = ''
while dec:
quo = dec % 2
dec = dec // 2
temp.append(quo)
while temp:
result += str(temp.pop())
return result
print(Dec2Bin0(7))
# 递归
def Dec2Bin1(dec):
result = ''
if dec:
result = Dec2Bin1(dec//2)
return result + str(dec%2)
else:
return result
print (Dec2Bin1(8))
7.3 回文联
# 方法一,用循环
def huiwen(str1):
l = len(str1)
i = 0
while l//2 != i:
if str1[i] == str1[l-i-1]:
i += 1
else:
print('不是回文联!')
break
if i == l//2:
print('是回文联!')
str2 = input('请输入一句话:')
# huiwen(str2)
# 方法二,用reversed
def huiwen2(string):
list1 = reversed(string)
if list(list1) == list(string):
print('是回文联!')
else:
print('不是回文联!')
# huiwen2('上海海上')
# 方法三,递归
def fn2(s):
# 参数s就是要检查的字符串
# 1.基线条件
# 字符串的长度小于2 则字符串一定是个回文
if len(s)<2:
return True
# # 第一个字符和最后一个字符不相同,则一定不是回文字符串
# elif s[0] != s[-1]:
# return False
# 2.递归条件
return s[0] == s[-1] and fn2(s[1:-1])
- 函数不定长参数的运用
# 编写一个函数,分别统计出传入字符串参数(可能不只-个参数)的英文字母、空格、数字和其它字符的个数。
def tongji(*string):
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'
length = len(string)
for a in range(length):
i = 0
j = 0
k = 0
l =0
for each in string[a]:
if each in nums:
i += 1
elif each in chars:
j += 1
elif each in ' ':
k += 1
else:
l += 1
print('第%d个字符串的英文字母,空格,数字,其他字符分别有%d%d%d%d个'%(a+1,j,k,i,l))
tongji('abc',' ','123','[)]')
网友评论