习题练习
- 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:利用while语句,条件为输入的字符不为’\n’.
#用isdigit函数判断是否数字
#用isalpha判断是否字母
#isalnum判断是否数字和字母的组合
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
-------------------------------------------------
Time :2018/04/03 21:16
Author : shanwu
File Name :0403.py
-------------------------------------------------
"""
a=input("Please input 字符串:")
n=0
m=0
j=0
l=0
for i in a:
if i.isdigit():
n=n+1
elif i.isalpha():
m=m+1
elif i == ' ':
j=j+1
else:
l=l+1
print("数字的个数:{0}".format(n))
print("字母的个数:{0}".format(m))
print("空格的个数:{0}".format(j))
print("其他字符的个数:{0}".format(l))
Please input 字符串:adflfl dk( )
数字的个数:0
字母的个数:8
空格的个数:2
其他字符的个数:2
输入一个数字,求出0到数字的阶乘和
n=0
m=1
a=input("please input a number: ")
if a.strip():
if a.isdigit():
for i in range(1,int(a)):
for j in range(1,i+1):
m =m*j
n=n+m
m=1
print("0到{0}的阶乘和:{1}".format(int(a),n))
else:
print("not number")
else:
print("Don't input space")
# 输出
please input a number: 5
0到5的阶乘和:33
假如ABCD乘9=DCBA,A=? B=? C=? D=?
for A in range(1, 10):
for B in range(0, 10):
for C in range(0, 10):
for D in range(1, 10):
start = 1000 * A + 100 * B + 10 * C + D
end = 1000 * D + 100 * C + 10 * B + A
if start * 9 == end:
print("A={0};B={1};C={2};D={3}".format(A, B, C, D))
print("{0} * 9 = {1}".format(start, end))
# 输出
A=1;B=0;C=8;D=9
1089 * 9 = 9801
九宫格
for i in range(1,10):
for j in [k for k in range(1,10) if (k != i)]:
for m in [k for k in range(1,10) if ((k!=i) and (k!=j))]:
for l in [k for k in range(1,10) if ((k!=i) and (k!=j) and (k!=m))]:
for p in [k for k in range(1,10) if ((k!=i) and (k!=j) and (k!=m) and (k!=l))]:
for r in [k for k in range(1,10) if ((k!=i) and (k!=j) and (k!=m) and (k!=l) and (k!=p))]:
for t in [k for k in range(1,10) if ((k!=i) and (k!=j) and (k!=m) and (k!=l) and (k!=p) and (k!=r))]:
for o in [k for k in range(1,10) if ((k!=i) and (k!=j) and (k!=m) and (k!=l) and (k!=p) and (k!=r) and (k!=t))]:
for q in [k for k in range(1,10) if ((k!=i) and (k!=j) and (k!=m) and (k!=l) and (k!=p) and (k!=r) and (k!=t) and (k!=o))]:
if((i+j+m)==(l+p+r)==(t+o+q)==(i+l+t)==(j+p+o)==(m+r+q)==(i+p+q)==(m+p+t)):
print(i,j,m)
print(l,p,r)
print(t,o,q)
print()
#输出
2 7 6
9 5 1
4 3 8
2 9 4
7 5 3
6 1 8
4 3 8
9 5 1
2 7 6
4 9 2
3 5 7
8 1 6
6 1 8
7 5 3
2 9 4
6 7 2
1 5 9
8 3 4
8 1 6
3 5 7
4 9 2
8 3 4
1 5 9
6 7 2
编码
编码
支持中文的编码:utf-8, gbk, gb2312
decode 解码
encode 编码不写python代码排头,就会报错。
s = "哈哈哈"
print(s)
这个代码文件被执行时就会出错,就是编码出了问题。
python默认将代码文件内容当作asci编码处理,但asci编码中不存在中文,因此抛出异常。
解决问题之道就是要让python知道文件中使用的是什么编码形式,
对于中文,可以用的常见编码有utf-8,gbk和gb2312等。只需在代码文件的最前端添加如下:
`#-*- coding:utf-8 -*-`
- Pycharm运行程序正常,控制台运行程序乱码
- 解决办法:
- 更改头文件的编码格式
# -*- coding:gbk -*-
就可以在windows控制台打印出来正常的字体了。 - 下面这种情况
- 更改头文件的编码格式
#-*-coding:utf-8 -*-
s = u"哈哈"
print(s)
print(type(s)) #unicode
m = "哈哈"
print(m)
print(type(m)) #str
说明:
文件申明是utf-8的编码,识别“哈哈”以后,以unicode对象的形式存在。如果我们用type查看,存储形式是unicode,python在向控制台输出unicode对象的时候会自动根据输出环境的编码进行转换。如果输出的不是unicode对象而是str类型。则会按照字符串的编码输出字符串。从而出现utf8没法在gbk编码的控制台展现
编码和解码
#-*- coding:utf-8 -*-
s = "中文"
s.encode("gbk")
报错了, 为什么呢?
- python转码的过程:
源有编码 -> unicode编码 -> 目的编码
Python 会自动的先将 s 解码为 unicode ,然后再编码成 gbk。因为解码是python自动进行的,我们没有指明解码方式,python 就会使用 sys.defaultencoding 指明的方式来解码。 - 可以使用下面的方法
s.decode(“utf-8”).encode(“gbk”)