[TOC]
在Windows上打开文件路径需要进行转义\才能正常进行找出文件,我们约定“\t”和“\r”分别表示“横向制表符(TAB)”和“回车符”:如下面
open('C:\windows\temp\readme.txt', 'r') #会报错
file1 = open(r'C:\windows\temp\readme.txt', 'r') #方式1
file1 = open('C:\\windows\\temp\\readme.txt', 'r') #方式2
1.编程输入程序并且进行验证选择.
#!/usr/bin/python3
#功能:课后作业1
import random
name = input("请输入您的姓名:")
num = input('请输入一个1~100的数中:')
num = int(num)
if num > random.randint(0,100):
print("恭喜您:" + name,"您输入的数字"+ num +"大于随机数")
else:
print("不能恭喜您了",name)
####### 结果输出 ##########
#请输入您的姓名:weiyigeek #
#请输入一个1~100的数中:50 #
#不能恭喜您了 weiyigeek #
2.打印输出如下图所示的代码:
#!/usr/bin/python3
#功能:课后作业04
count = input("请输入显示*号的个数:")
count = int(count)
while count:
print(' ' * (count - 1),'*' * count)
count = count - 1
else:
print("打印结束")
####### 结果输出 ##########
#请输入显示*号的个数:10
# **********
# *********
# ********
# *******
# ******
# *****
# ****
# ***
# **
# *
3.改进游戏增加数据类型输入错误判断。 前面使用 type(temp) != type(1) 或者 not isinstance(temp, int) 输入类型判断的;以上方法的思路是正确的,不过似乎忽略了一点儿:就是 input() 的返回值始终是字符串,所以 type(temp) 永远是 < class ‘str’> .
我们解决方法将采用字符串内置模块的方法,如String.isdigit() while not temp.isdigit(): temp = input(“抱歉,您的输入有误,请输入一个整数:”)
#!/usr/bin/python3
#功能:课后作业05
import random
jihui = 3
secret = random.randint(1,10)
print('##############简单的数字游戏###############')
guess = 0
print("请输入0~10之间的数字:",end='')
while (guess != secret) and (jihui > 0):
temp = input()
if temp.isdigit():
guess = int(temp)
if (guess == secret):
print("您刚好猜中数字:",secret) #猜中则会结束循环
else:
if (guess > secret):
print("MAX 值大了,亲")
else:
print("Min 值小了,亲")
if jihui > 1:
print("请再尝试一次:",end='')
else:
print("请机会用光了")
else:
print("对不起,输入有误,需要重新输入。")
jihui = jihui - 1 # 用户每输入一次,可用机会就-1
else:
print("游戏结束!")
####### 结果输出 ##########
# ------简单的数字游戏---------
# 请输入0~10之间的数字:5
# Min 值小了,亲
# 请再尝试一次:6
# Min 值小了,亲
# 请再尝试一次:8
# MAX 值大了,亲
# 请机会用光了
# 游戏结束!
4.现在的 Python 可以计算很大很大的数据,但是真正的大数据计算可是要靠刚刚的硬件滴,比如:
print(2 ** 2 ** 32)
# 一般很多机子都会在一会儿之后:Memory Overflow,内存不够用。
# 设计到幂操作,结果都是惊人滴。
你猜猜为何 print( (2 ** 2) ** 32) 就可以计算出结果呢?
结果:18446744073709551616
我猜想的是 print(2 ** 2 ** 32) 中由于 幂运算符 右边表达式的优先级大于左边表达式的优先级 ,计算的时候会这样:print(2 ** (2 ** 32)) #想想这个是一个多么恐怖的数字
5.爱因斯坦难题 有一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。 题目:请编程求解该阶梯至少有多少阶?
##########算法方法1##########
#!/usr/bin/python3
jieti = 7
while 1:
if ( jieti % 2 == 1) and ( jieti % 3 == 2) and ( jieti % 5 == 4) and ( jieti % 6 == 5) :
print("至少有 %d 阶梯" %jieti) #至少有 119 阶梯
break
else:
jieti = jieti + 7 # 根据题意,x一定是7的整数倍,所以每次+ 7
##########算法方法2##########
x = 7
i = 1
flag = 0
while i <= 100:
if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
flag = 1
else:
x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
i += 1
if flag == 1:
print('阶梯数是:', x)
else:
print('在程序限定的范围内找不到答案!')
6.使用 if elif else 在大多数情况下效率要比全部使用 if 要高,替代了switch…case 的功能;
score = int(input('请输入一个分数:'))
if 80 > score >= 60:
print('C')
elif 90 > score >= 80:
print('B')
elif 60 > score >= 0:
print('D')
elif 100 >= score >= 90:
print('A')
else:
print('输入错误!')
7.请将以下代码修改为三元操作符实现:
x, y, z = 6, 5, 4
if x < y:
small = x
if z < small: #先判断外部,再判断内部关系
small = z
elif y < z:
small = y
else:
small = z
###########转换成三元运算符#############
small = x if (x < y and x < z) else (y if y < z else z)
7.设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含”*”则不计算在内。
#!/usr/bin/python3
count = 3
password = '123456'
while count:
temp = input("请输入密码:")
if '*' in temp:
continue
elif temp == password:
print("输入的密码正确")
break;
else:
count = count - 1
print("密码输入错误,您还有 %d 次机会" %count)
print("Login Successful")
####### 结果输出 ##########
# 请输入密码:123
# 密码输入错误,您还有 2 次机会
# 请输入密码:*asdsa
# 请输入密码:156454
# 密码输入错误,您还有 1 次机会
# 请输入密码:123456
# 输入的密码正确
# Login Successful
8.有红、黄、蓝三种颜色的求,其中红球 3 个,黄球 3 个,绿球 6 个。先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配。
#!/usr/bin/python3
print('red\tyellow\tgreen')
for red in range(0, 4):
for yellow in range(0, 4):
for green in range(2, 7):
if red + yellow + green == 8:
# 注意,下边不是字符串拼接,因此不用“+”哦~
print(red, '\t', yellow, '\t', green)
####### 结果输出 ##########
# red yellow green
# 0 2 6
# 0 3 5
# 1 1 6
# 1 2 5
# 1 3 4
# 2 0 6
# 2 1 5
# 2 2 4
# 2 3 3
# 3 0 5
# 3 1 4
# 3 2 3
# 3 3 2
注释:range(2, 7) 是产生 [2, 3, 4, 5, 6] 这 5 个数,绿球不能是 1 个,因为如果绿球是 1 个的话,红球 + 黄球需要有 7 个才能符合题意,而红球和黄球每种只有 3 个,因此是 range(2, 7)
9.按照特定的格式进行输出列值;
#方法一:
member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]
count = 0
length = len(member)
while count < length:
print(member[count], member[count+1])
count += 2
#方法二:
length = len(member)
for each in range(len(length)):
if each%2 == 0:
print(member[each], member[each+1])
####### 结果输出 ##########
# 小甲鱼 88
# 黑夜 90
# 迷途 85
# 怡静 90
# 秋舞斜阳 88
# 小甲鱼 88
# 黑夜 90
# 迷途 85
# 怡静 90
# 秋舞斜阳 88
10.编写密码强度验证
#!/usr/bin/python3
#密码验证:强度检查
# 密码安全性检查代码
#
# 低级密码要求:
# 1. 密码由单纯的数字或字母组成
# 2. 密码长度小于等于8位
#
# 中级密码要求:
# 1. 密码必须由数字、字母或特殊字符(仅限:[email protected]#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
# 2. 密码长度不能低于8位
#
# 高级密码要求:
# 1. 密码必须由数字、字母及特殊字符(仅限:[email protected]#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
# 2. 密码只能由字母开头
# 3. 密码长度不能低于16位
symbols = r'''`[email protected]#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'
password = input("输入检查的密码:")
length = len(password)
while (password.isspace() or length == 0):
password = input("您输入的密码为空(或空格),请重新输入:")
length = len(length)
#判断字符串长度
if length <= 8:
flag_len = 1
elif length <16:
flag_len = 2
else:
flag_len = 3
flag_con = 0
#判断是否包含特殊字符
for each in password:
if each in symbols:
flag_con += 1
break;
#判断是否包含字母
for each in password:
if each in chars:
flag_con += 1
break;
#判断是否包含数字
for each in password:
if each in nums:
flag_con += 1
break;
#结果打印
while 1:
print("您的密码评级:",end="")
if flag_len == 1 or flag_con == 1:
print("低")
elif flag_len == 3 and flag_con == 3 and password[0].isalpha():
print("高")
break #这里的break用得精辟
else:
print("中")
print("请按以下方式提升您的密码安全级别:\n\
\t1. 密码必须由数字、字母及特殊字符三种组合\n\
\t2. 密码只能由字母开头\n\
\t3. 密码长度不能低于16位")
break
########### 结果输出 ##########
# 输入检查的密码:Weiyi2000Geek16!
# 您的密码评级:高
# 输入检查的密码:[email protected]
# 您的密码评级:中
# 请按以下方式提升您的密码安全级别:
# 1. 密码必须由数字、字母及特殊字符三种组合
# 2. 密码只能由字母开头
# 3. 密码长度不能低于16位
11.进制转换案例。
#!/usr/bin/python3
#方式1:进制转换
while 1:
temp = input("请输入一个整数(输入Q退出程序):")
if temp == 'Q':
break
temp = int(temp)
print("十进制 -> 十六进制 : %d -> 0x%x" %(temp,temp))
print("十进制 -> 八进制 : %d -> 0o%o" %(temp,temp))
print("十进制 -> 二进制 : %d ->" %temp, bin(temp))
#方式2:递归方式 list
listbin = []
def binary(x):
if x != 1:
binary(x // 2)
return listbin.append(x % 2)
else:
return listbin.append(1)
value = input("输入一个整形值:")
value = int(value)
binary(value)
for each in listbin:
print(each,end="")
else:
print("")
#方式3:更精简的方法 str
def Dec2Bin(dec):
result = ''
if dec:
result = Dec2Bin(dec//2)
return result + str(dec%2) #精辟之处
else:
return result #先记录第一个值
print(Dec2Bin(62))
########### 结果输出 ##########
# 请输入一个整数(输入Q退出程序):255
# 十进制 -> 十六进制 : 255 -> 0xff
# 十进制 -> 八进制 : 255 -> 0o377
# 十进制 -> 二进制 : 255 -> 0b11111111